1

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")
4

2 回答 2

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代码——这是开源软件的乐趣之一!

于 2013-01-25T10:54:10.307 回答
2

计算 THE 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 选项等效于从原始对中删除 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
于 2013-01-25T11:08:46.760 回答