Ошибка принуждения с использованием purrr для создания моделей

Чтобы лучше понять библиотеки R purrr и dplyr, я работаю с примером, описанным Хэдли Викхэм с использованием разных моделей и разбиения наборов данных. Однако я сталкиваюсь с ошибкой принуждения при использовании нескольких аргументов, например. используя map2 () и pmap ():

(список) объект не может быть приведен к типу 'integer'

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

    library(dplyr)
    library(purrr)
    library(randomForest)

    # generate a list of data frames ( using the iris data set )

    data_list <- lapply(1:10, FUN = function(x) iris)

    # generate a list of parameters:

    param_list <- as.list(seq.int(100,1000, by = 100))

    # - following works

    models <- data_list %>% map(~randomForest(Species ~., data = .))

   # - following works

    models <- seq_along(param_list) %>% 
              map(~randomForest(Species ~., data = data_list[[.]],
                                           ntree = param_list[[.]]))

    # - following has error: Error in randomForest.default(m, y, ...) : 
    #     (list) object cannot be coerced to type 'integer'

     models <- map2(data_list, param_list, 
                 ~randomForest(Species ~., data = ., ntree = .))

Я боролся с этой проблемой в течение нескольких дней, поэтому я, вероятно, запутался со списками, фреймами данных и т. Д., Поэтому благодарен за любую помощь.


person David    schedule 16.03.2017    source источник


Ответы (1)


Вы должны быть в порядке с:

models <- map2(data_list, param_list, 
               ~randomForest(Species ~., data = .x, ntree = .y))

В map2 неявные аргументы анонимных функций в правой части формулы - это .x и .y.

person Aurèle    schedule 16.03.2017
comment
Спасибо за решение, которое я реализовал на map2 (), и оно работает. Извините, что задаю другой связанный вопрос, но когда я добавляю третий список, например mtry_list ‹- перечислить (2,2,2,2,2,3,3,3,3,3) на указанное выше и использовать pmap (), с которым он работает: models‹ - pmap (list (data_list, param_list, mtry_list) , ~ randomForest (Species ~., data = .x, ntree = .y, mtry =.)) - почему я могу использовать. как третий аргумент и не говорите .z? - person David; 16.03.2017
comment
Я заинтригован и действительно не уверен, почему это работает (что я подтвердил со своей стороны). Я видел эту проблему github.com/tidyverse/purrr/issues/203 и когда в сомневаюсь, я бы посоветовал использовать обычный синтаксис анонимной функции. - person Aurèle; 17.03.2017