我试图在这个循环的每一次迭代之后保存一个数据帧,同时在数据帧中附加循环号。因此,我将得到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但是,当循环完成时,我只会得到最后的数据框架"name_5“来保存。我的问题是,我不知道如何保存数据帧的ith版本而不从循环中转义。
对我如何解决这个问题有什么建议吗?
编辑*
函数中有我的for循环,这可能是assign()不能工作的原因。我在上面附上了我的例子,以说明这一点。
发布于 2017-04-13 22:59:53
在循环中,使用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)
}https://stackoverflow.com/questions/43402898
复制相似问题