串联大向量变量

时间:2018-08-04 02:09:12

标签: r

我正在尝试从下面的for循环中编译变量s1,s2和sn。循环创建19个矩阵,其中包含1000列和各种行(由循环创建)的随机数。然后使用函数calc_sds_1,calc_sds_2和calc_sds_n(采用矩阵每一列的标准偏差(n,n-1,n-2))来计算这些值(“样本”)。

基本上我希望变量s1,s2,sn从循环的每次迭代中收集这些计算出的值,并将完整的矢量(应为19000个值)返回到全局环境。

calc_sds_1 <- function(x){
  sds_1 <- vector("numeric", 1000)
  for (i in 1:1000){
    sds_1[i] = std_1(x[,i])
  }
sds_1
}

calc_sds_2 <- function(x){
  sds_2 <- vector("numeric", 1000)
  for (i in 1:1000){
    sds_2[i] = std_2(x[,i])
  }
sds_2
}

calc_sds_n <- function(x){
  sds_n <- vector("numeric", 1000)
  for (i in 1:1000){
    sds_n[i] = std_n(x[,i])
  }
sds_n
}

s1 <- numeric()
s2 <- numeric()
sn <- numeric()

for (i in 2:20) {
    samps <- replicate(1000, rnorm(i))
    calc_sds_1(samps)
    calc_sds_2(samps)
    calc_sds_n(samps)
    s1 <- s1 + sds_1
    s2 <- s2 + sds_2
    sn <- sn + sds_n
    return(s1)
    return(s2)
    return(sn)
}

1 个答案:

答案 0 :(得分:1)

您的函数只能返回一个结果。将三个向量打包到一个列表中并返回列表:

calc_sds_1 <- function( x ){
    # your code
    return( list( s1, s2, sn ) )
}

通过以下方式将列表放入全球环境中:

x_back <- calc_sds_1( x )

,然后您可以使用x_back[[ 1 ]]等访问向量。

如果要/需要矢量名称,则需要重新分配,例如。

s1  <- x_back[[ 1 ]]
s2  <- x_back[[ 2 ]]
sn  <- x_back[[ 3 ]]

尽管对我来说,将它们保留在列表中而不是使用列表会更好。