1

function にはcor、「 use 」という素晴らしい引数があります (例: 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

THE RMSE を計算する平均関数にはna.rm引数があり、次のように使用できます。

RMSE <- function (pred,obs,na.rm=FALSE){
   sqrt(mean((pred - obs)^2, na.rm = na.rm))
}

ほとんどの場合、na.or.complete オプションを使用することは、元のペアから NA 値を削除することと同等であるため、na.rm 引数を使用して na.or.complete の動作を模倣できます。例えば ​​:

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

EDITは非常に小さい値を NA に設定します

データをどのように保管しているかわかりません。しかし、変数 x を持つ data.table があると仮定します。次のようなことができます:

 dat$x[dat$x <= -3.4e+38] <- NA
于 2013-01-25T11:08:46.760 に答える
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 つです。

于 2013-01-25T10:54:10.307 に答える