【问题标题】:Concatenating large vector variables连接大向量变量
【发布时间】:2018-08-04 02:09:12
【问题描述】:

我正在尝试从下面的 for 循环中编译我的变量(向量)s1、s2 和 sn。该循环创建 19 个 1000 列的矩阵和随机数的各种行(由循环创建)。然后使用函数 calc_sds_1、calc_sds_2 和 calc_sds_n 计算这些值(“samps”)(取矩阵每一列的标准偏差 (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)
}

【问题讨论】:

  • 您可能还想查看this 答案和链接讨论

标签: r


【解决方案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 ]]

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

【讨论】:

    猜你喜欢
    • 2017-02-15
    • 2023-02-07
    • 2015-07-27
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多