R:函数打印每行的值,但只返回单个值

vwkv1x7d  于 2023-01-15  发布在  其他
关注(0)|答案(2)|浏览(130)

我编写了两个函数来翻译名称(例如“哈灵顿”)转换为相应的电话号码(“4277464866”)。一个函数get_number()接受单个字符并返回其对应的数字(“h”至“4”),而translate_name_to_number()获取 Dataframe 列并返回等效的电话号码(“哈灵顿”to“4277464866”)当我把print()放入translate_name_to_number()函数时,它会打印出一串不同的、正确的字符串,具体来说,这个函数使用了几个for循环来遍历行,然后遍历行中的每个字符:

translate_name_to_number <- function(the_column) {
  for (the_string in the_column) { # iterate once per row
    name_vector <- strsplit(the_string, "")[[1]] # split into a vector to iterate over it
    built_phone_number <- "" # initialize a string to hold the built number
    for (a_letter in name_vector) { # for each letter in the name vector...
      built_phone_number <- str_c(built_phone_number, get_number(a_letter)) # ...add its number
    }
    print(built_phone_number) # print the concatenated result
    # return(built_phone_number) #...but this only returns one value
  }
}

当print语句处于活动状态时,我得到了一个很好的结果,如下所示:

[1] "7424273766"
[1] "4277464866"
[1] "6668466379"
[1] "9455426766"
[1] "8455277325"
[1] "7424273766"
[1] "7366464866"
[1] "4277464866"

这是一个很好的输出,也是我想放在新列中的内容。因此,我使用 Dataframe 并尝试使用管道和dplyr::mutate()应用translate_name_to_number()函数。然而,当我这样做时,我得到了一个新列,其行只包含最终名称的值,而不是每行的唯一值。
我显然漏掉了一个概念。有人能说明问题所在吗?

f0brbegy

f0brbegy1#

这是因为您的函数没有矢量化。
如果 Dataframe df列为name,则可以使用rowwise()

df%>%
  rowwise()%>%
  mutate(phone_number=translate_name_to_number(name))%>%
  ungroup()

也正如@r2evans在评论中指出的,函数应该重写为:
x一个一个一个一个x一个一个二个x

txu3uszq

txu3uszq2#

Return只返回最后一个值,你不能在一个循环中多次从函数返回。
我建议将您的值添加到列表中并返回该列表。

相关问题