Получение имени набора данных в файле .rda - PullRequest
2 голосов
/ 11 июня 2011

Предположим, у меня есть файл .rda, созданный с использованием save(). Пример:

save(mydata1, file = "anrdatafile.rda")

где mydata1 - фрейм данных.

Я хочу написать код в R, который: (1) загружает файл 'anrdatafile.rda'; (2) находит имя фрейма данных в этом файле (3) объединяет найденный фрейм данных с другим фреймом данных, скажем mydata2.

Как мне выполнить шаг 2? Если у меня есть имя фрейма данных на шаге 2, я могу сделать

combineddata = rbind(mydata1, mydata2)

Но я не знаю, как получить, чтобы имя кадра данных в файле .rda было mydata1 как часть кода.

Я пытался

nameofthedataframe = load('anrdatafile.rda')

Это присваивает строку «mydata1» переменной «nameofthedataframe», но как мне получить данные во фрейме данных mydata1?

Чтобы уточнить, я знаю, что могу использовать то же имя фрейма данных, которое использовалось для сохранения данных. Однако предположим, что я забыл, что это была за переменная. Или, что более важно, мне пришлось бы жестко закодировать имя переменной в моем коде. Мне было интересно, может ли программа выяснить имя фрейма данных во время выполнения, как только я дал ему имя файла.

Спасибо. Если не понятно, пожалуйста, дайте мне знать. Я постараюсь уточнить.

Ответы [ 4 ]

7 голосов
/ 11 июня 2011

Чтобы получить имя одной или нескольких переменных в файле RData, используйте среду для загрузки в.

Сначала создайте и сохраните несколькоdata:

R> grumpy <- 1; happy <- 42; sneezy <- 1/7
R> save(grumpy, happy, sneezy, file="/tmp/Dwarves.RData")
R> 

Затем в новом (или очищенном) сеансе R:

R> ls()
character(0)
R> myenv <- new.env()
R> load("/tmp/Dwarves.RData", env=myenv)
R> ls(envir=myenv)
[1] "grumpy" "happy"  "sneezy"
R> 
R> myenv$sneezy
[1] 0.142857
R> myenv$happy
[1] 42
R> 

, и вы видите, что переменные в этой среде, переданные в load(), соответствуют тому, что мы сохраняемв файле.

4 голосов
/ 11 июня 2011

Если у вас есть имя объекта, но вы хотите фактическое значение, используйте функцию get. Таким образом, вы можете сделать что-то вроде:

combineddata <- rbind( get(nameofthedataframe), mydata2 )
1 голос
/ 11 июня 2011

Если вы случайно захотите сначала создать множество файлов RData с одним фреймом данных, а затем объединить их, я думаю, пакет rtape сделает эту работу более удобным. Это позволяет создавать своего рода добавляемые файлы RData, а затем преобразовывать их в список или перебирать их.

В любом случае, в вашем случае это выглядело бы более-менее так:

#Make a new data frame, say A
rtapeAdd('myTape.tape',A) #This will create myTape.tape file
#...
#Make even newer data frame, say B
rtapeAdd('myTape.tape',B)
#... 
#...
rtapeAdd('myTape.tape',Z)

#Now the merge
do.call(rbind,rtapeAsList('myTape.tape'))->mergedDataFrame

Как видите, rtape не использует никаких имен для отдельных записей (важен только порядок), поэтому у вас нет проблем с их просмотром.

0 голосов
/ 11 июня 2011

Я все равно отвечу:

Как только вы запустите команду загрузки, фрейм данных снова появится в той же переменной!Вы можете легко проверить этот тип вещи с:

a<-1:5
a #[1] 1 2 3 4 5
save(a, "test.txt")
rm(a) #remove a from environment
a #Error: object 'a' not found #elvis has left the building!
namesloaded<-load("test.txt") #after this, namesloaded contains "a"
a #[1] 1 2 3 4 5 #elvis just rose from the dead
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...