Проблема применения purrr :: map () внутри вложенного фрейма данных - PullRequest
3 голосов
/ 22 сентября 2019

Я работаю над главой 25 «Многие модели» из R для Data Science * Хедли Уикхема https://r4ds.had.co.nz/many-models.html, однако я сталкиваюсь с проблемами при воссоздании примеров в 25.2.2.

Вот что у меня есть (и что работает):

require(gapminder); require(tidyverse); require(broom); require(modelr)

by_country <- gapminder %>% group_by(country,continent) %>% nest()
head(by_country)

# A tibble: 6 x 3
  country     continent data             
  <fct>       <fct>     <list>           
1 Afghanistan Asia      <tibble [12 × 4]>
2 Albania     Europe    <tibble [12 × 4]>
3 Algeria     Africa    <tibble [12 × 4]>
4 Angola      Africa    <tibble [12 × 4]>
5 Argentina   Americas  <tibble [12 × 4]>
6 Australia   Oceania   <tibble [12 × 4]>

Затем определение lm() для применения к каждому набору данных страны:

country_model <- function(df) {
  lm(lifeExp ~ year, data = df)
}

И тогда следующая строка не работает:

by_country <- by_country %>%
  mutate(model = map(data,country_model))

с сообщением об ошибке

Error in eval(predvars, data, env) : object 'lifeExp' not found 

Несмотря на то, что я написал, то же самое, что и то, что появилосьв главе Хэдли.

Я не уверен, что это недавняя проблема, которая раньше работала, поскольку у кого-то еще, очевидно, была проблема с примером: https://github.com/hadley/r4ds/issues/766 (без решения)

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 24 сентября 2019

Вам не нужно переопределять "by_country" дважды.

country_model <- function(df) {
lm(lifeExp ~ year, data = df)
}

by_country <- gapminder %>% 
group_by(country,continent) %>% 
nest()%>%
mutate(model = map(data,country_model))
...