【问题标题】:Saving output of for loop in separate data frames将 for 循环的输出保存在单独的数据帧中
【发布时间】:2014-03-14 23:03:20
【问题描述】:

我有一个简单的问题,尽管有很多类似的帖子,但我还是无法解决,因为我在 R 中有点笨拙,我没有得到我应该得到的任何东西.我有两组文件,

All.Files <- objects(pattern="constant.country[0-9]{4}")
all.files <- objects(pattern="constant[0-9]{4}")

我希望合并

mergefun <- function(X1, Y1) {
    merge(X1, Y1, by = "id")
} 

然后将每次合并的迭代保存到一个新的数据帧中

for (i in All.Files) {
    a <- get(i)
      { for (j in all.files)
         b <- get(j)
         d <- dataframe(mergefun(a, b))
         newname <- paste("C", substr(j, 9, 12), sep="")
         names(d) <- c("Id", "Country", "logGDP", "GRI", GRI.group", "Year")
         assign(newname,d)

       }  
    }

虽然我确信那里有更优雅的代码,但这段代码可以满足我的要求。问题是它只保存了合并的最终迭代,所以我没有得到 1:43 的数据帧,而只得到了第 43 个。我知道我无法在 for 循环中正确索引,但我已经努力了几个小时来理解我的错误并且失败了。

很抱歉,我没有包含可重现的示例,但我希望由于我的代码确实有效,因此有人能够立即看到我缺少的内容,这将允许所有 43 次迭代通过 assign 输出。我也知道 mapply 可能是一个更好的解决方案,但尽管尝试了几个小时,我还是无法获得任何牵引力!

最谦虚(也为我自己的无知而谦卑)谢谢。

【问题讨论】:

  • 这是您使用的确切代码吗?如果是这样,您在GRI.group 之后有一个额外的报价。
  • 很有趣——这是我唯一更改的代码行。我取出了一些列标题来简化它,并在这样做时弄乱了引用。所以不,当我运行它时,不存在不正确的引号问题。我完全没有错误;我的问题是我只能将迭代 43 输出为 df。
  • 您是否有一个问题,即您拉出的 j 的子字符串总是相同的?
  • 刚刚又看了一下您的代码。你的括号搞砸了。
  • 他们在什么意义上搞砸了?

标签: r for-loop


【解决方案1】:
for (i in All.Files) {
a <- get(i)
   for (j in all.files) {
     b <- get(j)
     d <- dataframe(mergefun(a, b))
     newname <- paste("C", substr(j, 9, 12), sep="")
     names(d) <- c("Id", "Country", "logGDP", "GRI", "GRI.group", "Year")
     assign(newname,d)

   }  
}

我修复了你的包围。还应该清楚的是,由于您的newname 仅依赖于j,因此您的新变量只会在外部for 循环的最后一次迭代中创建。因此,您最终只会得到 length(all.files) 变量。

【讨论】:

  • 谢谢!你所做的工作。我花了几分钟才弄清楚为什么用括号括住 j for 循环会导致问题,但我现在明白了。感谢您回答这么简单的问题——教会了我将在所有新代码构建中使用的东西。
  • 没问题。很乐意提供帮助,尤其是因为您的问题很好。请注意您正在创建的变量仅依赖于j 的事实!我认为您的代码不会按原样输出您想要的内容!
  • 老鼠。你说的对。回到绘图板。在原始代码中,它只给了我第 43 次迭代,但它是正确的输出。现在我得到了所有 43 个输出,但它们是错误的。一步一步,嗯?
  • 只是让你 newname 变量依赖于来自 i 的标识符。这将使它们独一无二。
  • 即使我在新名称中使用 i 它仍然只在每次合并中使用 j 的最后一次迭代(但它使用 i[1:43]。
猜你喜欢
  • 1970-01-01
  • 2020-05-28
  • 2018-01-21
  • 2014-08-13
  • 1970-01-01
  • 2021-09-29
  • 2020-03-29
  • 2021-10-27
  • 2018-11-13
相关资源
最近更新 更多