2016-04-04 4 views
0

У меня есть построить 10 моделей и генерировать свои предсказания следующим образом:R: Итерация по столбцам и вычислить частоту появления ошибок

 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 

Я хочу итерацию столбец за столбцом и вычислить RMSE, я попытался следующие, но он печатает то же значение:

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

} 

Каков наилучший способ для этого?

+2

делает 'x = df [[i]]' вместо 'x = df $ i' work – rawr

+0

Существует также пакет под названием' Metrics', который имеет такие функции, как 'RMSE' и т. Д. – 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

отлично, если я хочу сделать dump result в df, например 'c (modelName, RMSE)', насколько это сложно? –

+0

вот что я сделал 'new_df <- as.data.frame (unlist (lapply (df, FUN = RMSE, test)), col.names = c (" c "," d "))', но индекс имеет имя модели –

+0

извините data.frame –

Смежные вопросы