【发布时间】: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 的子字符串总是相同的?
-
刚刚又看了一下您的代码。你的括号搞砸了。
-
他们在什么意义上搞砸了?