【发布时间】:2016-06-28 14:43:05
【问题描述】:
在R 中,要查找向量的长度(bigz 或不),通常使用length 函数。例如
NonBigZ <- 1:10
NonBigZ
[1] 1 2 3 4 5 6 7 8 9 10
length(NonBigZ)
[1] 10
但是,使用gmp 包,如果您声明bigz 向量,则会自动返回向量的长度。例如
BigZ <- as.bigz(1:10)
BigZ
Big Integer ('bigz') object of length 10: ## <<-- length given here
[1] 1 2 3 4 5 6 7 8 9 10
## This seems redundant as it is already given above
length(BigZ)
[1] 10
我想在不额外调用length 的情况下检索该信息。我知道length 速度快如闪电,但如果你能避免调用它,它可以节省相当多的时间。观察:
system.time(sapply(1:10^6, function(x) length(BigZ)))
user system elapsed
7.81 0.00 7.84
我试过attributes(BigZ) 和str(BigZ) 无济于事。我也阅读了gmp 文档,但找不到任何内容。
【问题讨论】:
-
gmp:::print.bigz同样,使用gmp:::length.bigz计算length。似乎length.bigz不仅仅是像length这样的属性访问函数——例如见ns = c(1, 10, 50, 100, 200, 500, 1e3, 5e3, 1e4); timings = sapply(ns, function(n) { x = as.bigz(seq_len(n)); summary(microbenchmark(length(x), unit = "ms"))$median }); plot(ns, timings)。我想,在创建“bigz”时将“length”保存为属性可能是值得的。 -
不要把你的答案放在你的问题中(让问题看起来没有解决),你应该回答你自己的问题。
-
@Gregor,我对发布作为答案犹豫不决,因为我不确定我的答案是否足够彻底。任何人,我已经接受了你的建议。
-
它似乎回答了你的问题,所以我认为它作为一个答案比作为一个问题更好。如果有人提出了更好的答案,您总是可以投票/接受那个答案。我相信无论如何都要等待 48 小时才能接受您自己的答案。
标签: r optimization vector biginteger gmp