使用 lapply 调用函数时出现 R 错误
R error when calling a function with lapply
我有一个数据集,其中有一列由数字组成
dati$score[10:15]
[1] 7576 6362 764663 676164 764676 6364
我有这个函数可以计算我在 Whosebug 上找到的一个单元格中数字的总和,当我单独应用它时可以工作
digitsum <- function(x) sum(floor(x / 10^(0:(nchar(x) - 1))) %% 10)
我无法将其应用于列 dati$score,我收到此错误,我已尝试使用 lapply 和 for cycle
for (i in 1:lunghscore){
f <- dati[i,"score"]
post <- sum(floor(f / 18^(0:(nchar(f) - 1))) %% 18)
dati[i,"score"] <- post
i <- i + 1
}
lapply
dati[,"score"] <- lapply(X = dati[,"score"],FUN = digitsum)
我收到这个错误
2: In `[<-.data.frame`(`*tmp*`, , "score", value = list(20, 17, 26, :
provided 66121 variables to replace 1 variables
如何将函数 digitsum 应用于该列中的每个单元格?
问题是列表的输出总是一个列表,而你用列表的元素填充一个向量。如果您取消列出 lapply 函数,您的代码将有效,如下面的宠物示例所示:
> digitsum <- function(x) sum(floor(x / 10^(0:(nchar(x) - 1))) %% 10)
> dati <- data.frame(matrix(250:255, ncol = 2))
> dati
X1 X2
1 250 253
2 251 254
3 252 255
> lapply(dati[, "X2"], digitsum)
[[1]]
[1] 10
[[2]]
[1] 11
[[3]]
[1] 12
> dati[, "X2"]<-lapply(dati[, "X2"], digitsum)
Warning message:
In `[<-.data.frame`(`*tmp*`, , "X2", value = list(10, 11, 12)) :
provided 3 variables to replace 1 variables
以及解决方案:
> dati[, "X2"]<-unlist(lapply(dati[, "X2"], digitsum))
最好的,托马斯
我有一个数据集,其中有一列由数字组成
dati$score[10:15]
[1] 7576 6362 764663 676164 764676 6364
我有这个函数可以计算我在 Whosebug 上找到的一个单元格中数字的总和,当我单独应用它时可以工作
digitsum <- function(x) sum(floor(x / 10^(0:(nchar(x) - 1))) %% 10)
我无法将其应用于列 dati$score,我收到此错误,我已尝试使用 lapply 和 for cycle
for (i in 1:lunghscore){
f <- dati[i,"score"]
post <- sum(floor(f / 18^(0:(nchar(f) - 1))) %% 18)
dati[i,"score"] <- post
i <- i + 1
}
lapply
dati[,"score"] <- lapply(X = dati[,"score"],FUN = digitsum)
我收到这个错误
2: In `[<-.data.frame`(`*tmp*`, , "score", value = list(20, 17, 26, :
provided 66121 variables to replace 1 variables
如何将函数 digitsum 应用于该列中的每个单元格?
问题是列表的输出总是一个列表,而你用列表的元素填充一个向量。如果您取消列出 lapply 函数,您的代码将有效,如下面的宠物示例所示:
> digitsum <- function(x) sum(floor(x / 10^(0:(nchar(x) - 1))) %% 10)
> dati <- data.frame(matrix(250:255, ncol = 2))
> dati
X1 X2
1 250 253
2 251 254
3 252 255
> lapply(dati[, "X2"], digitsum)
[[1]]
[1] 10
[[2]]
[1] 11
[[3]]
[1] 12
> dati[, "X2"]<-lapply(dati[, "X2"], digitsum)
Warning message:
In `[<-.data.frame`(`*tmp*`, , "X2", value = list(10, 11, 12)) :
provided 3 variables to replace 1 variables
以及解决方案:
> dati[, "X2"]<-unlist(lapply(dati[, "X2"], digitsum))
最好的,托马斯