2016-04-04 4 views
0

を計算する:私は列ごとに反復してRMSEを計算したいR:私は10個のモデルを構築し、次のように彼らの予測を生成している列の上に反復処理し、エラーレート

 M1  M2  M3  M4  M5   M6  M7  M8  M9  M10 
1 9.546223 8.713140 8.736672 8.711169 8.719074 8.696506 8.849216 8.685843 8.720186 8.707842 
2 9.333491 8.633371 8.703537 8.659186 8.652638 8.651705 8.685260 8.651955 8.665795 8.660157 
3 10.134578 8.621685 8.707592 8.657538 8.646744 8.660359 8.723335 8.659033 8.666371 8.659188 
4 11.693361 8.606719 8.702254 8.637670 8.627075 8.596533 8.727353 8.610436 8.662495 8.636437 

、私は、次の試してみましたが、それは印刷します同じ値:

for(i in names(df)) { 
    x = df$i 
    print(sqrt(mean((x-test$value)^2))) 

} 

これを行うにはどうすればよいでしょうか?

+2

'x = df $ i'の代わりに' x = df [[i]] 'を実行します – rawr

+0

' RMSE'などの機能を持つ 'Metrics'というパッケージもあります... – Sotos

答えて

1

ループはforのループを使用する必要はありません。データフレームの各列に対して同じ操作を実行する場合は、lapplyを使用します。

RMSE <- function (x, test) sqrt(mean((x-test$value)^2)) 
x <- lapply(df, FUN = RMSE, test) 

デフォルトでは、lapplyがリストを返します。

データフレームが必要な場合は、as.data.frame(x)を実行します。

ベクトルを使用する場合は、unlist(x)を入力します。

+0

素晴らしい、もし私が 'c(modelName、RMSE)'のようにdfにダンプ結果を出したいのであれば、それはどれくらい難しいでしょうか? –

+0

これは私が 'new_df < - as.data.frame(unlist(lapply(df、FUN = RMSE、test))、col.names = c(" c "、" d "))'でしたが、モデル名 –

+0

申し訳ありません。data.frame –

関連する問題