#r
#r
Вопрос:
Я пытался решить проблему, с которой я столкнулся, с парой списков, которые у меня есть.
Я играю с созданием собственной функции перекрестной проверки для домашнего задания. Прямо сейчас я нахожусь на этапе, когда я сгенерировал два списка: список элементов класса lm и список повторных выборок из моих исходных данных.
Я создал 5 обучающих и 5 тестовых повторных выборок, используя функцию crossv_kfold() пакета modelr, называемую cvtest
cvtest<-crossv_kfold(MyDataSet,5)
Я создал список из 5 линейных моделей, используя обучающие наборы из cvtest, используя lapply
linModFunc<-function(data,form){
lm(form,data)
}
lmodtest<-lapply(cvtest$train,linModFunc,form=formula)
прямо сейчас я пытаюсь вычислить RSME каждой линейной модели в сочетании с ее обучающим набором.
Я пытался найти способ манипулировать lapply или sapply, чтобы получить элемент 1 cvtest, элемент 1 lmodtest, применить функцию rmse и продолжить движение вниз по обоим спискам.
в принципе, я хотел бы получить результат этого:
rmse(lmodtest,cvtest)
но что-то, что действительно работает.
Есть ли хороший способ сделать это? Я думаю, что мог бы сделать это с помощью цикла for, но, но я надеялся найти более элегантное решение.
Комментарии:
1.
Map(somefunc, cvtest, lmodtest)
?2. Нет.
Map
этоlapply
какmapply
естьsapply
. И все базовые-R. (Вы имеете в виду нижний регистрmap
… легко запутать.)3. Итак, что касается вашего другого вопроса,
Map
(напримерlapply
) всегда возвращаетlist
, поэтому он может работать с фреймами, списками или векторами просто отлично.4. И далее,
purrr::map
возвращаетlist
. Вы также можете подумать оpurrr::map_dfr
иpurrr::map_dfc
, которые «возвращают фреймы данных, созданные с помощью привязки строк и столбцов соответственно» (из?map
).5. Это сработало отлично! Мне просто нужно было добавить $ train, чтобы получить доступ к правильному списку для вычисления. Большое вам спасибо!