【问题标题】:How to access objects in R workspace by position?如何按位置访问 R 工作区中的对象?
【发布时间】:2014-12-13 03:58:10
【问题描述】:

我确信答案会非常简单。假设我的工作区中有许多数据帧,来自一个读取大量文件的函数。

for(i in 1:10) {
    df <- data.frame(matrix(1, nrow=10, ncol=20))
    assign(paste0("df", i), df)
    rm(list=c("df", "i"))
    }

如何通过工作区中的位置而不是名称来访问数据框(或对象)?

例如,假设我想复制工作区中的第一个对象。我可以通过ls()[1] 识别对象。但是,我如何扩展它以实际访问数据框。当然,temp &lt;- ls()[1] 不起作用。指出显而易见的任何帮助都会有所帮助!

【问题讨论】:

  • 你可以试试get(ls()[1])
  • @RichardScriven 这就是我正在寻找的明显答案。随意添加作为答案,所以我可以给你信用。

标签: r


【解决方案1】:

你真的不应该使用assign()。像这样创建一堆变量几乎总是一个坏主意,因为它们很难使用。您可能应该将数据合并到一个列表中。例如

df <- lapply(1:10, function(i) {
    data.frame(matrix(1, nrow=10, ncol=20))
}

然后您可以使用

访问数据帧
df[[1]]
df[[2]]

等等。但是如果你真的想通过ls()结果中的索引提取元素,你可以将变量名改为get()的值,即get(ls()[1])。但我强烈建议不要这样做,因为ls() 返回的顺序不能保证每次调用都具有任何意义,甚至不一定相同。

【讨论】:

  • 这是有道理的。我对 assign() 的使用实际上只是为了一个可重现的示例。我正在阅读大量文件,所有文件结构相同但名称不同。为方便起见,我想获取其中一个文件的特定行,因此我的意图是从工作区中选择一个对象。
  • 我看不出你也没有理由不为这种情况使用列表。如果您是 R 新手并且您正在使用 getassign,那么变化是您没有以“R-like”的方式做事。
  • 点了。我将尝试重新编写代码以更接近 R 约定。是的,对 R 来说还是新手......
猜你喜欢
  • 2015-12-07
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
相关资源
最近更新 更多