【问题标题】:R: Creating new variables in a for loop and assign valuesR:在for循环中创建新变量并赋值
【发布时间】:2019-03-17 22:52:46
【问题描述】:

我想创建一个新变量,分配一个值列表,然后写入一个分层数据框。我尝试了以下但它没有写入。

for(i in 1:sample){
    for(j in 1:10){
      x[,j]<-0
      name <- paste("hierdata[[i]]$Test", j, sep = "_")
      assign(name, rowSums(alpha+beta+x)))
    }
}

感谢一些帮助。

【问题讨论】:

  • 请问您有reprex 数据样本吗?最好带 dput。
  • 使用嵌套的for循环通常是不好的做法,增长数据框通常是不好的做法,使用存储到字符串中的代码通常是不好的做法,使用assign通常是不好的做法:)。如果你提供一个可复制的例子,我相信有人会很乐意为你提供一个很好的、充满良好实践的班轮;)。

标签: r assign


【解决方案1】:

解决@Moody_Mudskipper 的评论:

声明分层数据的最佳方式是使用索引列表:

hierdata <- lapply(1:sample,
       function(iterator)
         {
         temp_list <- lapply(1:10,
                function(j)
                  {
                  x[,j]<-0
                  value <- rowSums(alpha+beta+x)
                  return(value)
                })
         names(temp_list) <- lapply(1:10,function(j){paste0("temp_",j)})
         return(temp_list)
       })

不是真正的“一个班轮”,但它包含所有好的“东西”。 Lapply 默认返回列表,所以它只是在每个列表中嵌套列表。

希望您喜欢一些“好习惯”。 :) 我只是想在第一次尝试时准确地解决您的问题。

【讨论】:

  • 要说清楚,我的反对意见不是我的,我希望我听起来没有沾沾自喜,我不知道 OP 想要做的事情是否可以在一个简短的班轮中说实话,因为我真的不想尝试在没有示例的情况下破译它应该做什么:),它只是基于我对此类代码的经验。
  • 当然 :D 我不认为它是你的,但这只是让我提交另一个更好(我相信)答案的另一个因素;)
【解决方案2】:

尝试使用

for(i in 1:sample){
  hierdata[[i]] <- list()
  for(j in 1:10){
    code_j_init <- paste0("hierdata[[",i,"]]$Test_",j,"<- list()")
    eval(parse(text = code_j_init))
    hierdata[[i]][[j]] <- list(1,2,3)
  }
}

for(i in 1:sample){
  hierdata[[i]] <- list()
  names <- c()
  for(j in 1:10){
    hierdata[[i]][[j]] <- list(1,2,3)
    names <- c(names,paste0("Test_",j))
  }
  names(hierdata[[i]]) <- names
}

【讨论】:

  • 谢谢。我收到错误“code_j
  • 是的,我没注意到我放错了逗号,应该在引号之前
  • 我的意思是在引用之后:D 再次抱歉
  • 有趣的是,我现在可以放置计算的值并将它们放入分配的变量中。然而,现在的问题是虽然创建了变量,但它们并没有写入每个 i 的 hierdata[[i]] 中。相反,它们在全局环境的值部分中创建为单独的变量。有什么想法吗?
  • 我现在可以写,但只能写最后一个元素。因此,如果上面的 code_j 有一个 10 个值的列表,则只写入最后一个值。知道如何将所有 10 个值写入数据帧吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-27
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 2018-02-18
  • 1970-01-01
相关资源
最近更新 更多