pmin给出了错误的答案
pmin
在以下示例中未返回相应的输出。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。如果有这样的报告为一个错误?
所以我想通了,这是因为x
是data.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
,但在这种情况下失败。
这比一行更深一点。 'each'重复长度为'mmm':'each Gregor
这很棘手,'pmin'似乎被设计为对称工作,'pmin(x,y)'和'pmin(y,x)'返回相同的结果。我认为公平地说,它从来没有打算用于数据框架 - 尽管抛出一个错误而不是一个混乱的结果可能会更好。 – Gregor
@格雷戈尔 - 那将是我的想法。如果它不是两个(或n个)向量,或者两个(或n个)完全相同维度的data.frames/matrices,它应该抛出一个错误。 – thelatemail
这似乎是一个奇怪的结果充其量和我确认我得到同样的事情。像'pmin(data.frame(a = 1:3,b = 3:5),1)'对我来说没什么意义,特别是当'pmin(data.frame(a = 1:3,b = 3: 5),1:3)'出错。看起来并不理想。 – thelatemail
让我们真正打破它 - 'pmin(data.frame(a = 1:3,b = 3:5),data.frame(a = c(1,1,1)))' – thelatemail
提示:你正在寻找为'do.call'。 –