每次迭代后保存数据帧[r]

时间:2017-04-13 22:52:21

标签: r loops

我尝试在此循环的每次迭代后保存数据帧,同时附加带有循环编号的数据帧。因此,我将留下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()无效的原因。我已经在上面添加了我的示例来展示这一点。

1 个答案:

答案 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)
}