【发布时间】:2016-07-06 18:49:47
【问题描述】:
我需要在循环中检索函数返回的列表元素,并使用这些列表元素创建一个矩阵
功能:
function(med, days){
i <- 0
cnt = 1
lCnt = 1
value <- 0
fx <- 0
t <- 0
flag <- 0
daysList <- NULL
valuesList <- NULL
for(i in days){
lambda = ((0.693)/(med*30.475))
fx[cnt] <- c(1 - exp(-lambda*(i*7)))
if(cnt == 1){
prob = rbinom(1,1,fx[cnt])
}else{
t[cnt] <- ((fx[cnt]-fx[cnt - 1])/(1-fx[cnt-1]))
prob = rbinom(1,1,t[cnt])
}
if(cnt == 1){
tmp = days[cnt]
}else{
tmp = days[cnt] - days[cnt -1]
}
if(prob == 0 && flag == 0){
value = value + tmp
valuesList[lCnt] <- prob
}else{
if(flag == 0){
value = value + tmp
valuesList[lCnt] <- prob
flag <- 1
}else{
valuesList[lCnt] <- 'E'
}
}
daysList[lCnt] <- days[cnt]
lCnt = lCnt + 1
if(flag == 0){
cnt = cnt + 1
}
}
ret <- list('rDays' = daysList,'rValues' = valuesList)
return(ret)
}
现在我想对不同的输入重复这个函数,所以我用for循环如下:
for(i in 1:300){
days1=c(rnorm(8,mean=56,sd=3))
days=cumsum(days1)
res[i] <- getMedData (med,days)
}
最后我想要两个矩阵,一个包含函数返回的rDays,另一个包含rValues
谁能帮我创建这种格式的矩阵,因为我是 R 新手,所以我找不到最好的方法
【问题讨论】:
-
我不确定您使用什么样的值作为输入,或者函数的确切用途。但是 for 循环需要为 res 建立一个空向量,否则您将收到错误消息。在循环开始之前使用 res = c() 。有了更多的上下文,可以提供更多的帮助。如果您能举例说明输出的外观,那将非常有帮助。
-
似乎您想将
res拆分为两个单独的矩阵。如果是这样,最好删除所有不必要的代码并提供相关的dput(res)(或其中的摘录)。 -
感谢 zacdev 的回复,预期输出是两个不同的矩阵,一个包含 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [1,] “1” “E” “E” “E” “E” “E” “E” “E” [2,] “1” “E” “E” “E” “E " "E" "E" "E" 又包含了各自的值 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [1 ,] 54.53939 54.53939 54.53939 54.53939 54.53939 54.53939 54.53939 54.53939 [2,1] 55.78143 55.78143 55.78143 55.78143 55.78143 55.78143 55.78143 55.78143 跨度>