【问题标题】:Is there a way to dynamically use already created variables within a for loop?有没有办法在 for 循环中动态使用已经创建的变量?
【发布时间】:2019-06-26 22:23:30
【问题描述】:

我是 R 新手,我想创建新的变量名并使用之前在 for 循环中创建的其他一些变量名。

我在网上找到了在循环中创建新变量的方法,但是我无法对之前创建的其他变量进行操作。我尝试使用粘贴函数并在 for 循环中创建变量。有人知道我如何在循环中处理这个已经创建的变量吗?

这就是手动完成的方式。

ACE1_dropc = umxModify(ACE1, update = "c_r1c1", name = "AE")

ACE2_dropc = umxModify(ACE2, update = "c_r1c1", name = "AE")

ACE3_dropc = umxModify(ACE3, update = "c_r1c1", name = "AE") 

通过使用下一个循环,创建了变量,但它们都在函数umxMofidy 中调用相同的参数ACE1ACE1 是已创建的类 S4 的变量)。我想在每次迭代中使用不同的变量(ACE1ACE2ACE3)但是当我尝试使用paste0("ACE",i) 时它不起作用。

for(i in 1:3){
  assign(paste("ACE", i, "_dropc", sep = ""), umxModify(ACE1, update = "c_r1c1", name = "AE") )    
}

【问题讨论】:

    标签: r loops


    【解决方案1】:

    您可以使用get() 通过其名称检索变量,尽管使用列表或其他数据结构通常是最佳做法。举个例子

    a1 = 1
    z = get(paste0("a",1))
    print(z)
    1
    

    在您的循环中,您可以将1 更改为i -> get(paste0("ACE",i))

    【讨论】:

    • 不仅是最佳实践,而且更容易。
    【解决方案2】:

    我不确定 umxModify 是什么,但我肯定会转到 list。在下面的示例中,我将随机数分配给列表l,然后计算它们的绝对值。请注意,列表的所有元素都已命名,并且可以通过l[[paste0("iteration", i)]] 访问。

    l <- list()
    
    for(i in 1:3){
      l[[paste0("iteration_", i)]] <- rnorm(1)
    }
    
    lapply(l, abs)
    

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 2014-05-20
      • 2015-04-28
      • 2019-06-14
      相关资源
      最近更新 更多