Простой цикл с подмножеством и присвоением имени переменной - PullRequest
0 голосов
/ 28 августа 2018

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

Я мог бы использовать функцию subset, lapply или даже анонимную функцию для решения этой проблемы, но здесь я просто хочу понять, почему этот конкретный код не работает.

library(gapminder)
library(dplyr)

for (i in unique(gapminder$year)) {
paste0("gapminder", i) <- print(gapminder %>%
         filter(year == i))
}

С печатью или без, та же проблема

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Используйте функцию назначить для сохранения вывода.

for (i in unique(gapminder$year)) 
{
    assign(paste0("gapminder", i),print(gapminder %>%filter(year == i)))
}

Если вы хотите получить конкретный вывод, используйте функцию get .

out_i = get(paste0("gapminder", i))
0 голосов
/ 28 августа 2018

Это потому, что вы назначены функции (paste0).

Если вы удалите эту часть, она напечатает каждый отфильтрованный кадр данных:

library(gapminder)
library(dplyr)

for (i in unique(gapminder$year)) {
  print(gapminder %>% filter(year == i))
}

Вы можете назначить каждому list, например так:

my_list <- list()

library(gapminder)
library(dplyr)

for (i in seq_along(unique(gapminder$year))) {
  year_filter <- unique(gapminder$year)[i] # each iteration we get another year
  my_list[[i]] <- gapminder %>% filter(year == year_filter)
  cat(paste0("gapminder", year_filter, " ")) # use cat if you want to print at each iteration
}

paste0 просто объединяет векторы после преобразования в символ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...