在cor
函数中,有一个很好的论据是“使用”(例如:use =“na.or.complete”)
我试图在计算RMSE或偏差时使用相同的参数。它似乎无法正常工作。我想知道我们可以使用什么。
RMSE <- function(x, y){
sqrt(mean((x-y)^2))}
RMSE(x,y, use = "na.or.complete")
Error in RMSE(x,y, use = "na.or.complete") :
unused argument(s) (use = "na.or.complete")
答案 0 :(得分:2)
简而言之,没有。您必须将use=
参数引用到cor
的原因是它指定了内部使用的字符参数来决定算法。它没有传递函数。如果在命令提示符下键入cor
,则会看到一行:
na.method <- pmatch(use, c("all.obs", "complete.obs", "pairwise.complete.obs",
"everything", "na.or.complete"))
然后if
上的一堆na.method
语句。
但是,您可以通过在函数签名中添加,use=
参数来编写自己的等效项:
RMSE <- function(x, y, use="all") {
if(use=="all") # Do stuff
if(use=="na.or.complete") # Do other stuff
sqrt(mean((x-y)^2))
}
您甚至可以将代码基于cor
代码 - 这是开源软件的乐趣之一!
答案 1 :(得分:2)
计算RMSE的平均函数有一个na.rm
参数,你可以像这样使用它:
RMSE <- function (pred,obs,na.rm=FALSE){
sqrt(mean((pred - obs)^2, na.rm = na.rm))
}
na.rm参数可以用来模仿na.or.complete行为,因为在几乎情况下,使用na.or.complete选项是equiavlent从原始对中删除NA值。例如:
swM <- swiss[,1:2]
swM[1,2] <- NA
swM[1,1] <- NA
identical(cor(swM, use = "na.or.complete"),
cor(na.exclude(swM), use = "all"))
TRUE
使用RMSE
swM[1,2] <- NA
swM[1,1] <- NA
identical(RMSE(swM[,1],swM[,2],na.rm=T),
RMSE(swM[,1],swM[,2],na.rm=F))
FALSE
编辑将非常小的值设置为NA
我不知道你如何存储你的数据。但我假设你有一个带变量x的data.table。你可以这样做:
dat$x[dat$x <= -3.4e+38] <- NA