pmin给出了错误的答案

时间:2017-06-23 00:09:22

标签: r dataframe

pmin在以下示例中未返回适当的输出。

eps <- 1e-16
x <- structure(list(X = c(0.219801587301587, 0.340792857142857, 0.398129365079365, 
                      1, 1, 0.853353968253968, 0.930726984126984, 0.980263131313131, 
                      0.968269047619047, 0.953053336369513, 1, 1, 1, 0.951969003219003, 
                      0.91514335177894, 0.884824997224998, 0.884824997224998, 0.884824997224998 )), row.names = c(NA, 18L), class = "data.frame", .Names = "X")

pmin(x, 1 - eps)

该函数错误地返回NA,其中x的值为1.是否应将此报告为错误?

1 个答案:

答案 0 :(得分:5)

所以我发现这是因为xdata.frame而pmin期待一个向量。所以以下工作正常:

pmin(x[,1], 1 - eps)

但我想理解为什么它不适用于data.frame。因此,查看违规行pmin的代码如下:

mmm[change] <- each[change]

因为each引用常量(在这种情况下为1 - eps)而change是逻辑向量,除了each[1]之外的任何内容都将返回NA。而x是向量的情况在函数的开头执行:

  if (all(vapply(elts, function(x) is.atomic(x) && !is.object(x), NA))) {
      mmm <- .Internal(pmin(na.rm, ...))
      mostattributes(mmm) <- attributes(elts[[1L]])
   }

pmin的值是向量而后一部分处理可能有data.frame的情况时,它似乎是用于代码的那部分代码,但是在给定的情况下它失败了场景。