【问题标题】:Iterating through an integer 64 array prints incorrect values in R遍历整数 64 数组会在 R 中打印不正确的值
【发布时间】:2021-05-10 08:05:10
【问题描述】:

for 循环和lapply 本身不支持integer64 吗?

> x <- as.integer64(c("100000000000", "10000000000000"))
> x
integer64
[1] 100000000000   10000000000000
> for(y in x) {print(y)}
[1] 4.940656e-313
[1] 4.940656e-311
> tmp <- lapply(x, function(y) {print(y)})
[1] 4.940656e-313
[1] 4.940656e-311
> for(i in 1:length(x)) {print(x[i])}
integer64
[1] 100000000000
integer64
[1] 10000000000000
> as.list(x)
[[1]]
[1] 4.940656e-313

[[2]]
[1] 4.940656e-311
> as.list(as.integer64(x[1]))
[[1]]
[1] 4.940656e-313


【问题讨论】:

    标签: r bit64 integer64


    【解决方案1】:

    您可以将其存储在列表中并遍历列表:

    library(bit64)
    z <- list(as.integer64("100000000000"), as.integer64("10000000000000"))
    
    for(y in z) {print((y))}
    #integer64
    #[1] 100000000000
    #integer64
    #[1] 10000000000000
    
    tmp <- lapply(z, function(y) {print(y)})
    #integer64
    #[1] 100000000000
    #integer64
    #[1] 10000000000000
    

    或使用适用于lapplygmp

    library(gmp)
    x <- as.bigz(c("100000000000", "10000000000000"))
    
    lapply(x, function(y) {print(y)})
    #Big Integer ('bigz') :
    #[1] 100000000000
    #Big Integer ('bigz') :
    #[1] 10000000000000
    

    【讨论】:

    • 如何将paste 与 integer64 列表一起使用?在这种情况下,bigz 可能会有所帮助!
    • 也许可以试试:paste(lapply(z, as.character))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 2011-10-07
    • 2019-06-30
    相关资源
    最近更新 更多