我正在尝试从下面的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)
}
答案 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 ]]
尽管对我来说,将它们保留在列表中而不是使用列表会更好。