我有一个数的向量(例如c(1, 11, 1232, 4221, 2)
),我需要每个元素的数字和的对应向量(c(1, 2, 8, 9, 2)
,在前面的例子中)。
我发现了一些很好的解决方案,最好的(从Digit sum function in R)是:
digitsum <- function(x) sum(floor(x / 10^(0:(nchar(x) - 1))) %% 10)
然而,这个解决方案不是矢量化的,它一次只能处理一个元素。
那么,有没有一种方法可以向量化这个解,并创建一个类似的函数来处理向量?(而不是循环遍历所有元素)
4条答案
按热度按时间m3eecexj1#
另一种可能性,灵感来自GitHub的要点,它不需要分割或转换为字符:
基准(向量大小为100,000):该解决方案是最快的。
rt4zxlrg2#
bksxznpy3#
您可以循环最大位数
1 + floor(log10(max(x)))
,使用x %% 10L
获取最后一位,使用x %% 10L
删除最后一位,而不是循环所有元素使用RCPP可能有助于提高速度。
基准(摘自@Maël)
在这种情况下,C++版本是最快的,使用的内存量最少。
hmtdttj44#
您可以尝试
utf8ToInt
如下