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)
Run Code Online (Sandbox Code Playgroud)
该函数错误地返回NA值为1的x位置.是否应将此报告为错误?
所以我发现这是因为xa data.frame和pmin正在期待一个向量.所以以下工作正常:
pmin(x[,1], 1 - eps)
Run Code Online (Sandbox Code Playgroud)
但是我想知道它为什么不起作用data.frame.因此,查看pmin违规行的代码如下:
mmm[change] <- each[change]
Run Code Online (Sandbox Code Playgroud)
因为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]])
}
Run Code Online (Sandbox Code Playgroud)
代码的那部分似乎是用于当值为pmin向量而后者用于处理可能具有的情况时data.frame,但在此给定方案中失败.