首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使R's应用中的类型转换无效(bit64示例)

如何使R's应用中的类型转换无效(bit64示例)
EN

Stack Overflow用户
提问于 2014-04-07 08:09:13
回答 1查看 423关注 0票数 4

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

代码语言:javascript
复制
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来避免这种情况,但我有两个问题:

  1. 为什么是类型转换?在这种情况下,他们是否使用了R规则?
  2. 有什么办法可以避免这种类型的转换?

蒂娅。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-07 09:55:54

这是lapply的代码

代码语言:javascript
复制
function (X, FUN, ...) 
{
    FUN <- match.fun(FUN)
    if (!is.vector(X) || is.object(X)) 
        X <- as.list(X)
    .Internal(lapply(X, FUN))
}

现在检查一下这个:

代码语言:javascript
复制
!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")

属性可以被删除,除非参数已经是一个列表或表达式。

所以,要么从一开始就创建一个列表,要么添加类属性:

代码语言:javascript
复制
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编写一个方法。也许值得一个特征请求..。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22906843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档