2016-02-09 7 views
1

Я хотел бы использовать mmetric функцию из пакета rminer У меня есть два набора данных (наблюдение и прогнозирование), и я хотел бы применить функцию по столбцу, как мне это сделать?R применить функцию с 2 dataframe

Прогноз:

 aa  oo dcl  iy  sh 
    2.255 0.648 -0.111 0.111 -0.049 
    0.239 0.753 -0.972 1.907 0.000 
    2.521 1.072 -0.107 0.100 -0.068 
    0.415 1.072 0.735 0.789 0.885 
    0.101 0.629 0.293 0.740 1.562 
    0.496 -0.260 -0.133 -0.078 0.108 

Наблюдение:

aa  oo dcl  iy  sh 
    2.255 0.648 -0.111 0.111 -0.049 
    0.239 0.753 -0.972 1.907 0.000 
    2.521 0.403 -0.107 0.100 -0.068 
    0.415 2.713 -0.637 0.789 0.885 
    0.101 0.629 0.293 0.740 1.562 
    2.606 -0.260 -0.133 -0.078 0.108 

для одного столбца можно использовать

mmetric(obs[,1], pred[,1], mmetric = "MAE") 

как автоматически применить это ко всему набору данных? Я попробовал с «apply», и я искал, как передавать больше аргументов или как работать с большим количеством наборов данных/списков, но я не нашел никакого решения!

Спасибо!

+0

Вы могли 'lapply' над вашими обоих data.frames имена. То, что я имею в виду, это 'lapply (names (obs), function (x) {mmetric (obs [x], pred [x], mmetric =" MAE ")})' –

ответ

0

Мы можем использовать Map применить функцию mmetric на соответствующих колонках

mapply(function(x,y) mmetric(x,y, metric='MAE'), obs, pred) 
#  aa  oo  dcl  iy  sh 
#0.3516667 0.3850000 0.2286667 0.0000000 0.0000000 

Или нам не нужны анонимные функции

Map(mmetric, metric='MAE', obs, pred) 
+0

вы уверены в этом? Я пробовал и применял функциональную ячейку по ячейке, я получил обратно 20265 результатов на исходные 2 набора данных с размерами 4053 * 5 – Sojers

+0

@Sojers Я обновил результат, который я получил. По вашему сообщению у вас есть два data.frames. Я предполагаю, что у вас есть две матрицы вместо «data.frames». В этом случае 'mapply (function (x, y) mmetric (x, y, metric = 'MAE'), as.data.frame (obs), as.data.frame (pred))' – akrun

+0

спасибо! Второй набор данных не был отброшен в data.frame, можете ли вы объяснить мне, почему он работает по столбцу функции карты? Можно ли использовать его по строке? или клеткой? Просто чтобы понять код и применить его к другим проблемам! – Sojers

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