R 使用Lappy通过自定义函数传递数据帧变量时出错
我有一个用户建议的函数,作为对我前面问题的回答:R 使用Lappy通过自定义函数传递数据帧变量时出错,r,function,lapply,R,Function,Lapply,我有一个用户建议的函数,作为对我前面问题的回答: word_string <- function(x) { inds <- seq_len(nchar(x)) start = inds[-length(inds)] stop = inds[-1] substring(x, start, stop) } 我现在希望能够将该函数应用于数据帧中指定列的所有行 以下数据框用于说明: word <- c("House", "Motorcar", "Boat", "Dog
word_string <- function(x) {
inds <- seq_len(nchar(x))
start = inds[-length(inds)]
stop = inds[-1]
substring(x, start, stop)
}
我现在希望能够将该函数应用于数据帧中指定列的所有行
以下数据框用于说明:
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
因此,您可以看到函数正在被应用,但它的应用使得它对每一行进行部分计算。
所需的输出类似于:
[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"
非常感谢您的指导。原因是
[
仍然是一个带有一列的data.frame(如果我们不使用,
),因此这里的单位是一列
str(my_df['word'])
'data.frame': 6 obs. of 1 variable:
# $ word: chr "House" "Motorcar" "Boat" "Dog" ...
lappy
在单个列上循环,而不是在该列中的每个元素上循环
我们需要$
或[[
lapply(my_df[['word']], word_string)
#[[1]]
#[1] "Ho" "ou" "us" "se"
#[[2]]
#[1] "Mo" "ot" "to" "or" "rc" "ca" "ar"
#[[3]]
#[1] "Bo" "oa" "at"
#[[4]]
#[1] "Do" "og"
#[[5]]
#[1] "Tr" "re" "ee"
#[[6]]
#[1] "Dr" "ri" "in" "nk"
啊,是的!这似乎是一个显而易见的原因。谢谢你,阿克伦。我会接受你的回答。
str(my_df['word'])
'data.frame': 6 obs. of 1 variable:
# $ word: chr "House" "Motorcar" "Boat" "Dog" ...
lapply(my_df[['word']], word_string)
#[[1]]
#[1] "Ho" "ou" "us" "se"
#[[2]]
#[1] "Mo" "ot" "to" "or" "rc" "ca" "ar"
#[[3]]
#[1] "Bo" "oa" "at"
#[[4]]
#[1] "Do" "og"
#[[5]]
#[1] "Tr" "re" "ee"
#[[6]]
#[1] "Dr" "ri" "in" "nk"