首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么min(200,300)返回integer64类的300

为什么min(200,300)返回integer64类的300
EN

Stack Overflow用户
提问于 2019-11-18 14:17:25
回答 2查看 114关注 0票数 7

我发现了以下结果,这在我看来是非常不直观的:

代码语言:javascript
复制
library(bit64)
x = as.integer64(200)
y = as.integer64(300)
min(x, y)
integer64
[1] 300
min.integer64(x, y)
integer64
[1] 300

当然,有一些明显的事情我没有得到,但有人能指出给我看吗?

代码语言:javascript
复制
> sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: CentOS Linux 7 (Core)

Matrix products: default
BLAS:   /usr/lib64/libblas.so.3.4.2
LAPACK: /usr/lib64/liblapack.so.3.4.2

locale:
 [1] LC_CTYPE=en_US.utf8       LC_NUMERIC=C             
 [3] LC_TIME=en_US.utf8        LC_COLLATE=en_US.utf8    
 [5] LC_MONETARY=en_US.utf8    LC_MESSAGES=en_US.utf8   
 [7] LC_PAPER=en_US.utf8       LC_NAME=C                
 [9] LC_ADDRESS=C              LC_TELEPHONE=C           
[11] LC_MEASUREMENT=en_US.utf8 LC_IDENTIFICATION=C      

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
[1] bit64_0.9-7 bit_1.1-14 

loaded via a namespace (and not attached):
[1] compiler_3.6.1
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-19 19:09:00

我很抱歉,但这只是个错误。我应该更清楚,而且已经在修理它了。不幸的是,我为包“bit”、“bit64”、“ff”编写的下一包中包含了包“bit”中有关类bit的接口更改。这意味着(在测试完成后)宣布对R包开发的界面更改,并等待4周部署到CRAN。因此,您可以更快地从r伪造(它还没有)得到修补程序。一旦修好了,我就告诉你。亲切问候延斯

票数 1
EN

Stack Overflow用户

发布于 2019-11-18 15:25:21

我很确定这是个窃听器。请向包维护人员报告。

如果我稍微修改了min.integer64的定义,它就能正常工作:

代码语言:javascript
复制
assignInNamespace("min.integer64",
function (..., na.rm = FALSE) 
{
  l <- list(...)
  ret <- double(1)
  noval <- TRUE
  if (length(l) == 1) {
    if (length(l[[1]])) 
      noval <- FALSE
    .Call(bit64:::C_min_integer64, l[[1]], na.rm, ret)
    oldClass(ret) <- "integer64"
  }
  else {
    ret <- sapply(l, function(e) {
      if (length(e)) 
        noval <<- FALSE
      if (is.integer64(e)) {
        ret <- double(1) #this was missing
        .Call(bit64:::C_min_integer64, e, na.rm, ret)
        ret
      }
      else {
        as.integer64(min(e, na.rm = na.rm))
      }
    })
    oldClass(ret) <- "integer64"
    ret <- min(ret, na.rm = na.rm)
  }
  if (noval) 
    warning("no non-NA value, returning +9223372036854775807")
  ret
}, pos = "package:bit64")

min(x, y)
#integer64
#[1] 200
min(y, x)
#integer64
#[1] 200
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58916594

复制
相关文章

相似问题

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