Цикл по именам кадров данных в R и сохранение соответствующего кадра данных в виде файла Rds - PullRequest
0 голосов
/ 28 мая 2019

У меня в сеансе R загружено около 30 отдельных фреймов данных, каждый с разными именами.У меня также есть символьный вектор с именем mydfs, который содержит имена всех этих фреймов данных, загруженных в мой сеанс R.Я пытаюсь перебрать mydfs и сохранить в виде файла rds каждый фрейм данных, перечисленный в элементах mydfs, но по какой-то причине я могу сохранить только символьную строку с именем фрейма данных.пытается сохранить (не сам datafame).Вот смоделированный, воспроизводимый пример того, что у меня есть:

#Create vector of dataframes that exist in base r to create a reproducible example
mydfs<-c("cars","iris","iris3","mtcars")

#My code that creates files, but they don't contain my dataframe data for some reason
for (i in 1:length(mydfs)){
  savefile<-paste0(paste0("D:/Data/", mydfs[i]), ".Rds")
  saveRDS(mydfs[i], file=savefile)
  print(paste("Dataframe Saved:", mydfs[i]))
}

Это приводит к следующему выводу журнала:

[1] "Dataframe Saved: cars"
[1] "Dataframe Saved: iris"
[1] "Dataframe Saved: iris3"
[1] "Dataframe Saved: mtcars"

Затем я пытаюсь прочитать в любом из файлов, которые я создал:

#But when read back in only contain a single character string of the dataframe name
a<-readRDS("D:/Data/iris3.Rds")
str(a)


chr "iris3"

Обратите внимание, что когда я снова читаю iris3.Rds в новую сессию R с использованием readRDS, у меня нет ожидаемого фрейма данных, но есть односимвольный вектор, содержащий имя фэймвараа не данные.

Я давно не программировал на R, поскольку мой текущий клиент предпочитал SAS, поэтому я думаю, что я каким-то образом путаю зацикливание макропеременных в SAS с R, и поэтому, когда я вызываю saveRDS, я 'м, передавая один символьный вектор вместо фактического кадра данных.Как я могу получить кадр данных для передачи в saveRDS вместо символа?

Спасибо, что помогли мне распутать мое мышление SAS с моим немного ржавым R мышлением.

1 Ответ

3 голосов
/ 28 мая 2019

В настоящее время вы просто сохраняете имена фреймов данных. Вы можете использовать функцию get следующим образом:

mydfs<-c("cars","iris","iris3","mtcars")

for (i in 1:length(mydfs)){
  savefile<-paste0(paste0("D:/Data/", mydfs[i]), ".Rds")
  saveRDS(get(mydfs[i]), file=savefile)
  print(paste("Dataframe Saved:", mydfs[i]))
}

readRDS('D:/Data/iris3.RDS')
...