我正在尝试对数据帧的最后2列中的整数进行求和。我找到了一个求和的函数,但是我认为应用该函数可能会遇到问题-不确定吗?
Dataframe
a = c("a", "b", "c")
b = c(1, 11, 2)
c = c(2, 4, 23)
data <- data.frame(a,b,c)
#Digitsum function
digitsum <- function(x) sum(floor(x / 10^(0:(nchar(as.character(x)) - 1))) %% 10)
#Applying function
data[2:3] <- lapply(data[2:3], digitsum)
这是我得到的错误:
*Warning messages:
1: In 0:(nchar(as.character(x)) - 1) :
numerical expression has 3 elements: only the first used
2: In 0:(nchar(as.character(x)) - 1) :
numerical expression has 3 elements: only the first used*
目前,您的函数digitsum
可以用于单个标量输入,例如,
digitsum(32)
# [1] 5
但是,它不能接受向量输入,否则":"
会抱怨。您需要使用Vectorize
以下命令对这个函数进行矢量化处理:
vec_digitsum <- Vectorize(digitsum)
然后它适用于矢量输入:
b = c(1, 11, 2)
vec_digitsum(b)
# [1] 1 2 2
现在您可以轻松使用lapply
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句