假设我使用.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
中的数据?
为了澄清,我知道我可以使用与用于保存数据相同的数据框名称。但是,假设我忘记了变量是什么。或者,更重要的是,我必须在代码中对变量名进行硬编码。我想知道一旦我给它文件名,程序是否可以在运行时找出数据框的名称。
感谢。如果不清楚,请告诉我。我会尽力澄清。
答案 0 :(得分:7)
要获取RData
文件中的一个或多个变量的名称,请使用 环境 加载。
首先,创建并保存一些数据:
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()
的该环境中的变量对应于我们在文件中保存的内容。
答案 1 :(得分:4)
如果您有对象的名称,但想要实际值,请使用get
功能。所以你可以这样做:
combineddata <- rbind( get(nameofthedataframe), mydata2 )
答案 2 :(得分:1)
如果您不小心想首先使用单个数据框制作大量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没有对单个条目使用任何名称(仅限订单),因此您没有浏览它们的问题。
答案 3 :(得分:0)
无论如何我会回答:
运行load命令后,数据帧将再次出现在同一个变量中! 您可以使用以下方法轻松测试此类事物:
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