【发布时间】:2020-04-26 19:11:07
【问题描述】:
我有一个用户建议的功能,作为对我之前问题的回答:
word_string <- function(x) {
inds <- seq_len(nchar(x))
start = inds[-length(inds)]
stop = inds[-1]
substring(x, start, stop)
}
该功能按预期工作,并根据我的规范将给定单词分解为组件:
word_string('microwave')
[1] "mi" "ic" "cr" "ro" "ow" "wa" "av" "ve"
我现在想要做的是将函数应用于数据框中指定列的所有行。
这是用于说明目的的数据框:
word <- c("House", "Motorcar", "Boat", "Dog", "Tree", "Drink")
some_value <- c("2","100","16","999", "65","1000000")
my_df <- data.frame(word, some_value, stringsAsFactors = FALSE )
my_df
word some_value
1 House 2
2 Motorcar 100
3 Boat 16
4 Dog 999
5 Tree 65
6 Drink 1000000
现在,如果我使用 lapply 在我的数据帧上运行该函数,我不仅会得到不正确的结果,还会出现错误消息。
lapply(my_df['word'], word_string)
$word
[1] "Ho" "ot" "at" "" "Tr" "ri"
Warning message:
In seq_len(nchar(x)) : first element used of 'length.out' argument
因此您可以看到该函数正在被应用,但它被应用以部分评估每一行。 所需的输出类似于:
[1] "ho" "ou" "us" "se
[2] "mo" "ot" "to" "or" "rc" "ca" "ar"
[3] "bo" "oa" "at"
[4] "do" "og"
[5] "tr" "re" "ee"
[6] "dr" "ri" "in" "nk"
非常感谢任何指导。
【问题讨论】: