можете ли вы использовать lapply / sapply on для применения элемента одного списка к соответствующему элементу другого списка?

#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, чтобы получить доступ к правильному списку для вычисления. Большое вам спасибо!