gpt4 book ai didi

r - 如何在 R 应用中取消类型转换(bit64 示例)

转载 作者:行者123 更新时间:2023-12-04 10:59:52 25 4
gpt4 key购买 nike

我在一些 R 代码中使用了 bit64 包。我创建了一个向量
64 位整数,然后尝试使用 sapply迭代这些
向量中的整数。下面是一个例子:

v = c(as.integer64(1), as.integer64(2), as.integer64(3))
sapply(v, function(x){is.integer64(x)})
sapply(v, function(x){print(x)})

两者 is.integer64(x)print(x)给出不正确的
(或至少)意外的答案(错误和不正确的浮点值)。
我可以通过直接索引向量 c 来规避这一点但我有
两个问题:
  • 为什么要类型转换?在这种情况下,R 是否使用了一些规则?
  • 有什么办法可以避免这种类型转换?

  • TIA。

    最佳答案

    这是lapply的代码:

    function (X, FUN, ...) 
    {
    FUN <- match.fun(FUN)
    if (!is.vector(X) || is.object(X))
    X <- as.list(X)
    .Internal(lapply(X, FUN))
    }

    现在检查这个:
    !is.vector(v)
    #TRUE

    as.list(v)
    #[[1]]
    #[1] 4.940656e-324
    #
    #[[2]]
    #[1] 9.881313e-324
    #
    #[[3]]
    #[1] 1.482197e-323

    来自 help("as.list") :

    Attributes may be dropped unless the argument already is a list or expression.



    因此,要么从头开始创建列表,要么添加类属性:
    v_list <- lapply(as.list(v), function(x) {
    class(x) <- "integer64"
    x
    })

    sapply(v_list, function(x){is.integer64(x)})
    #[1] TRUE TRUE TRUE

    包 authours 应该考虑为 as.list 编写一个方法.可能值得一个功能请求......

    关于r - 如何在 R 应用中取消类型转换(bit64 示例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22906843/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com