问题中的对象“ A”实际上不是data.table。 na.omit()
是一种通用方法,多余的参数可能会被点所吞噬。因此,尽管没有引发错误,但调用了na.omit.matrix()
或na.omit.data.frame()
,这会忽略具有NA值的任何行。
这是S3系统的诅咒,可能会咬你。当我收到意外的输出时,首先要做的就是例如在控制台上执行na.omit
(不带括号)。这将打印功能定义。如果我看到类似UseMethod("na.omit")
之类的内容,则表明行为因类而异,因此,请检查对象的类。
R软件包ellipsis旨在解决这一缺陷。下面是一种阻止这种情况再次发生的方法(非常基于该自述文件!)
library(data.table)
library(ellipsis)
mat <- matrix(c(1,2,3,NA),nrow = 2)
colnames(mat) <- c("a","b")
safe_na.omit <- function(object,...) {
check_dots_used()
na.omit(object,...)
}
safe_na.omit(mat,col = "a")
#> Error: 1 components of `...` were not used.
#>
#> We detected these problematic arguments:
#> * `col`
#>
#> Did you misspecify an argument?
dt <- as.data.table(mat)
safe_na.omit(dt,cols = "a")
#> a b
#> 1: 1 3
#> 2: 2 NA
本文链接:https://www.f2er.com/3047734.html