如何在R'中取消类型转换;s应用(位64示例)

如何在R'中取消类型转换;s应用(位64示例),r,64-bit,sapply,R,64 Bit,Sapply,我在一些R代码中使用bit64包。我已经创建了一个向量 然后尝试使用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)}) 都是.integer64(x)和打印(x)给出了不正确的 (或至少)意外答案(错误和不正确的浮点值)。 我可以通过直接

我在一些R代码中使用bit64包。我已经创建了一个向量 然后尝试使用
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)})
都是.integer64(x)
打印(x)
给出了不正确的 (或至少)意外答案(错误和不正确的浮点值)。 我可以通过直接为向量
c
编制索引来避免这种情况,但我有 两个问题:

  • 为什么要进行类型转换?在这种情况下,他们的规则R是否会使用
  • 有什么方法可以避免这种类型转换

  • 蒂亚

    这是
    lappy
    的代码:

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

    可以删除属性,除非参数已经是列表或 表情

    因此,要么从头开始创建列表,要么添加类属性:

    v_list <- lapply(as.list(v), function(x) {
      class(x) <- "integer64"
      x
      })
    
    sapply(v_list, function(x){is.integer64(x)})
    #[1] TRUE TRUE TRUE
    
    v_列表
    
    v_list <- lapply(as.list(v), function(x) {
      class(x) <- "integer64"
      x
      })
    
    sapply(v_list, function(x){is.integer64(x)})
    #[1] TRUE TRUE TRUE