【问题标题】:Retrieve list elements returned by a function in loop检索循环中函数返回的列表元素
【发布时间】: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 跨度>

标签: r list function


【解决方案1】:

终于找到了路 调用函数的书面循环如下(我不知道这是否正确,但它对我有用:p)

for(i in 1:300){
days1=c(rnorm(8,mean=56,sd=3))
days=cumsum(days1)
a <- getMedData (med,days)
for(j in 1:length(days)){
    resVal[i,j] = a[[1]][j]
    resProb[i,j] = a[[2]][j]
}}

【讨论】:

    猜你喜欢
    • 2018-03-24
    • 2019-09-03
    • 1970-01-01
    • 2019-03-31
    • 2022-01-11
    • 2022-12-05
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    相关资源
    最近更新 更多