2017-04-13 56 views
0

我想这个循环的每次迭代后保存的数据帧,而与附加的环路号的数据帧。所以,我将留下5个数据框,并且名称不同。保存数据框中每次迭代[R]后

在我的实际代码,所有的数据帧都将有所不同,但为了简单起见,我只是显示一个数据帧在这里。

我下面提供了一些测试代码。

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”循环完成后保存。我的问题是我不知道如何保存第i个版本的数据帧,而不会从循环中逃脱。

我如何能解决这个问题有什么建议?

*****编辑*****

我有一个功能,这可能是为什么assign()不工作的内部循环。我已经在上面添加了我的示例来显示它。

回答

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) 
} 
+0

呜呜这是行不通的。我会附加我的代码,使其更接近我所拥有的。 – Chef1075

+0

它现在在哪些方面工作?你的意思是这对你原来的问题没有帮助? –

+0

我相信'assign'不工作时,它也被包裹在一个函数 – Chef1075