【问题标题】:Having output of for loop get a different name after each run in R在 R 中每次运行后,for 循环的输出都会得到不同的名称
【发布时间】:2018-01-10 06:07:31
【问题描述】:

我希望在每次运行 for 循环后,将 for 循环的输出存储为由 p 组成的名称,1:i 附加到 p

例如,在 for 循环的运行 1 中,我希望 for 循环的输出命名为 p1,在运行 2 时,p2 等等。所以,在i 运行之后,我们将拥有p1, p2, ..., pi 对象。

我想知道是否有可能实现这一目标?

(注意:我的最终目标是在prop相互减去p1, p2, ..., pi Pair-Wise函数。)

prop <- function(n, yes, a, b){

 p = numeric(length(n))      

for(i in 1:length(n)){  
p[i] <- rbeta(1e6, a[i] + yes[i], b[i] + (n[i] - yes[i]))
   }
}

【问题讨论】:

  • 使用p &lt;- vector("list", length(n))for循环内部p[[i]] &lt;-最好不要在全局环境中创建多个对象

标签: r function for-loop


【解决方案1】:

是你要找的那个吗?

prop <- function(n, yes, a, b){
  p <- list() 
  for(i in 1:length(n)){  
    p[[i]] <- rbeta(1e6, a[i] + yes[i], b[i] + (n[i] - yes[i]))
  }
  names(p) <- paste("p",n,sep = "")
  return(p)
}

【讨论】:

    【解决方案2】:

    assign 函数可用于为环境中的名称赋值。

    用法

    assign(x, value, pos = -1, envir = as.environment(pos),
           inherits = FALSE, immediate = TRUE)
    

    它可以用作:

    prop <- function(n, shape1, shape2, ncp){
      sol <- list()
      for(i in 1:n){
        p_var <- paste0("p", i)
        x <- rbeta(n, shape1[i], shape2[i], ncp[i])
        assign(p_var, x, envir = as.environment(.GlobalEnv))
        sol[[p_var]] <- get(p_var)
      }
      sol
    }
    n=3;shape1=c(1,2,3);shape2=c(4,5,6);ncp=c(0.1,0.2,0.3)
    

    现在prop 函数将返回命名列表以及创建对象p1,p2,p3

    > out <- prop(n, shape1, shape2, ncp)
    > out
    $p1
    [1] 0.33343059 0.01592913 0.08372019
    
    $p2
    [1] 0.2380992 0.1766112 0.1967696
    
    $p3
    [1] 0.27451031 0.23409990 0.06519348
    
    > p1
    [1] 0.33343059 0.01592913 0.08372019
    > p2
    [1] 0.2380992 0.1766112 0.1967696
    > p3
    [1] 0.27451031 0.23409990 0.06519348
    

    希望我对您的问题的理解很清楚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-24
      • 2021-11-14
      • 1970-01-01
      相关资源
      最近更新 更多