【问题标题】:Getting the name of the data set in an '.rda' file在“.rda”文件中获取数据集的名称
【发布时间】:2011-06-11 13:33:24
【问题描述】:

假设我有一个使用save() 创建的.rda 文件。示例:

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

为了澄清,我知道我可以使用用于保存数据的相同数据框名称。但是,假设我忘记了变量是什么。或者,更重要的是,我必须在我的代码中硬编码变量名。我想知道一旦我给它文件名,程序是否可以在运行时找出数据框的名称。

谢谢。如果不清楚,请告诉我。我会尽力澄清。

【问题讨论】:

  • 我已将您的消息标记为更适合 stackoverflow。我认为版主很快就会把它移到那里,所以没有必要在那里创建一个新问题。

标签: r


【解决方案1】:

要获取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() 的变量对应于我们保存在文件中的内容。

【讨论】:

  • 为什么在新的/清理过的 R 会话中?在这种情况下,创建一个新环境的目的不是让这一切变得不必要吗?
  • 如果我理解正确,这只是为了提供一个清晰的例子,而不是一般用途?
【解决方案2】:

如果您有一个对象的名称,但您想要实际值,则使用get 函数。所以你可以这样做:

combineddata <- rbind( get(nameofthedataframe), mydata2 )

【讨论】:

【解决方案3】:

如果你不小心想先用单个数据框制作很多 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 没有为单个条目使用任何名称(仅顺序很重要),因此您在浏览它们时不会遇到问题。

【讨论】:

  • @hadley 这个想法是将许多对象堆叠在一个文件中,*RDS 只能放置/获取一个。
【解决方案4】:

我还是会回答的:

运行加载命令后,数据框将再次出现在同一个变量中! 您可以通过以下方式轻松测试此类事物:

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

【讨论】:

  • 我知道它存在于同一个变量中。但是,假设我忘记了变量是什么。更重要的是,我必须在我的代码中硬编码变量名。我想知道程序是否可以在我给它文件名后在运行时找出数据框的名称。谢谢!
猜你喜欢
  • 2012-01-22
  • 1970-01-01
  • 2016-12-18
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
相关资源
最近更新 更多