我尝试在此循环的每次迭代后保存数据帧,同时附加带有循环编号的数据帧。因此,我将留下5个不同名称的数据框。
在我的实际代码中,所有数据框都会有所不同,但为了简单起见,我在这里只展示了一个数据框。
我在下面提供了一些测试代码。
testFunction <- function() {
for (i in 1:5) {
x <- data.frame(c(1:10), c(1,2,3,4,5,6,7,8,9,10), c(10:19))
name <- paste("name", i, sep = "_")
name <- x
}
}
创建的示例数据框将命名为:
testFunction()
name_1
name_2
name_3
name_4
name_5
但是,我只能获得最终数据框&#34; name_5&#34;循环完成时保存。我的问题是我不知道如何在不退出循环的情况下保存第i个版本的数据框。
关于如何解决这个问题的任何建议?
*****编辑*****
我在函数中使用了for循环,这可能是assign()
无效的原因。我已经在上面添加了我的示例来展示这一点。
答案 0 :(得分:1)
在循环中,使用assign()
:
for (i in 1:5) {
x <- data.frame(c(1:10), c(1,2,3,4,5,6,7,8,9,10), c(10:19))
assign( paste("name", i, sep = "_") , x)
}
修改强>
如您现在想要在函数中执行此操作,您必须指定要分配的环境。我怀疑你想要全球环境:
testFunction <- function() {
for (i in 1:5) {
x <- data.frame(c(1:10), c(1,2,3,4,5,6,7,8,9,10), c(10:19))
assign( paste("name", i, sep = "_") , x , envir = globalenv() )
}
}
请注意,编写编辑封闭环境的函数不是一个好习惯。您最好只返回数据框的命名列表,例如像这样:
testFunction_2 <- function() {
out_list <- vector(mode = "list", length = 5)
for (i in 1:5) {
x <- data.frame(c(1:10), c(1,2,3,4,5,6,7,8,9,10), c(10:19))
out_list[[i]] <- x
names(out_list)[i] <- paste("name", i, sep = "_")
}
return(out_list)
}