我需要将数字矢量转换为R中的字符。据我所知,有不同的方法(请参见下文)。
看来最快的方法是sprintf和gettextf。
set.seed(1)
a <- round(runif(100000), 2)
system.time(b1 <- as.character(a))
user system elapsed
0.108 0.000 0.105
system.time(b2 <- formatC(a))
user system elapsed
0.052 0.000 0.052
system.time(b3 <- sprintf('%.2f', a))
user system elapsed
0.044 0.000 0.046
system.time(b4 <- gettextf('%.2f', a))
user system elapsed
0.048 0.000 0.046
system.time(b5 <- paste0('', a))
user system elapsed
0.124 0.000 0.129
还有其他方法可以将数字转换为R中的字符吗?感谢您的任何建议。
由于您已经舍入a
到有限精度,因此请一次转换唯一值,然后查找这些值
f0 = formatC
f1 = function(x) { ux = unique(x); formatC(ux)[match(x, ux)] }
这给出了相同的结果
> identical(f0(a), f1(a))
[1] TRUE
并且至少对于样本数据集而言更快。
> microbenchmark(f0(a), f1(a))
Unit: milliseconds
expr min lq mean median uq max neval
f0(a) 46.05171 46.89991 47.33683 47.42225 47.58196 52.43244 100
f1(a) 10.97090 11.39974 11.48993 11.52598 11.58505 11.90506 100
(尽管此效率在R中真的有意义吗?)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句