在R中每次运行后输出for循环得到一个不同的名称

时间:2018-01-10 06:07:31

标签: r function for-loop

我想在每次for循环后,for循环的输出存储为p的名称,1:i附加到p

例如,在for循环的第1行,我希望for循环的输出在运行2,p1处命名为p2,依此类推。因此,在i运行后,我们将拥有p1, p2, ..., pi个对象。

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

注意: 我的最终目标是在{{}>中减去p1, p2, ..., pi 配对聪明 {1}}功能。)

prop

2 个答案:

答案 0 :(得分:2)

这是你要找的人吗?

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

答案 1 :(得分:1)

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函数将返回命名列表以及创建对象p1p2p3

> 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

希望我对你的问题的理解是清楚的。