使用lapply调用函数时出现R错误

时间:2016-01-16 13:39:32

标签: r lapply

我有一个数据集,其中一列由数字

组成
dati$score[10:15]
[1]   7576   6362 764663 676164 764676   6364

我有这个函数来计算我在stackoverflow上找到的单元格中的数字的总和,当我单独应用它时可以正常工作

digitsum <- function(x) sum(floor(x / 10^(0:(nchar(x) - 1))) %% 10)

我无法将此应用于列dati $得分,我收到此错误,我尝试使用lapply和for循环

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

如何将函数digitum应用于该列中的每个单元格?

1 个答案:

答案 0 :(得分:1)

问题是列表的输出始终是一个列表,并使用列表元素填充向量。如果您取消列出您的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))

最好,托马斯