首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >每次迭代后保存数据[r]

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

Stack Overflow用户
提问于 2017-04-13 22:52:21
回答 1查看 3.8K关注 0票数 0

我试图在这个循环的每一次迭代之后保存一个数据帧,同时在数据帧中附加循环号。因此,我将得到5个数据帧,它们都有不同的名称。

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

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

代码语言:javascript
运行
复制
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

            }
}

创建的示例数据帧将命名为:

代码语言:javascript
运行
复制
testFunction() 

name_1
name_2
name_3
name_4
name_5

但是,当循环完成时,我只会得到最后的数据框架"name_5“来保存。我的问题是,我不知道如何保存数据帧的ith版本而不从循环中转义。

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

编辑*

函数中有我的for循环,这可能是assign()不能工作的原因。我在上面附上了我的例子,以说明这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-13 22:59:53

在循环中,使用assign()

代码语言:javascript
运行
复制
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)      
}

编辑:

由于您现在希望在函数中执行此操作,您必须指定要分配给的环境。我怀疑你想要全球环境:

代码语言:javascript
运行
复制
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() )          
    }    
}

请注意,编写一个编辑封闭环境的函数是不太好的做法。最好只返回数据帧的命名列表,例如:

代码语言:javascript
运行
复制
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)
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43402898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档