我在一些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)
都不正确
(或至少)意外答案(FALSE和错误的浮点值)。
我可以通过直接索引向量c
来避免这种情况,但我有
两个问题:
TIA。
答案 0 :(得分:5)
以下是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")
:
除非参数已经是列表或属性,否则可以删除属性 表达
因此,要么从头开始创建列表,要么添加类属性:
v_list <- lapply(as.list(v), function(x) {
class(x) <- "integer64"
x
})
sapply(v_list, function(x){is.integer64(x)})
#[1] TRUE TRUE TRUE
包授权应考虑为as.list
编写方法。可能值得一个功能请求...