Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将嵌套for循环输出组合到向量中_R_For Loop - Fatal编程技术网

将嵌套for循环输出组合到向量中

将嵌套for循环输出组合到向量中,r,for-loop,R,For Loop,我用3个协变量拟合了一个多级马尔可夫(MSM)模型。我试图应用一个函数,它的主要参数是MSM模型和协变量的值。功能是: transition<-qmatrix.msm(MSMmod, ci="normal", covariates=list(grossTon= 10, activ=0, period=1)) 对于函数中的两个for循环,我希望通过grossTon(12个值)和activ(4个值)的所有组合得到48个向量(每个值7个值,与前一个类似),从而最终将它们组合成一个向量(336

我用3个协变量拟合了一个多级马尔可夫(MSM)模型。我试图应用一个函数,它的主要参数是MSM模型和协变量的值。功能是:

transition<-qmatrix.msm(MSMmod,  ci="normal", covariates=list(grossTon= 10, activ=0, period=1))
对于函数中的两个for循环,我希望通过grossTon(12个值)和activ(4个值)的所有组合得到48个向量(每个值7个值,与前一个类似),从而最终将它们组合成一个向量(336个值,7*12*4)

这是我的职责:

transRate<-function(period){
  estim<-data.frame(matrix(rep(0,336),336,1))

  for(i in seq(10,120,by=10)){
    for(j in seq(0,3, by=1)){

    estim[c(i,j)]<-qmatrix.msm(msm.Mult4,  ci="normal", covariates=list(grossTon=i, activ=j, period=period))$estimates[c(5,2,10,7,13,14,15)]
    outp[c(i,j)]<-c(estim[c(i,j)])#Here I'm trying to get my 336 values vector
    }
  }

  grosTvect<-sort(rep(seq(10,120,by=10),28))
  rate<-rep(c("q12","q21","q23","q32","q14","q24","q34"),48)
  estimRate<-data.frame(grosTvect,rate,outp)

  return(estimRate)                     
} 
dataFrame<-transRate(period=1)

当我写
estim[I,j]
outp时,您的“estim”数据帧的维数错误,无法保存“估计”中的长度为7的向量。您也不声明“outp”,因此如果解释器代码在允许数据帧分配成功后到达该位置,则会抛出另一个错误。(不清楚为什么要额外分配到“outp”。)

使用名为
c(“q12”、“q21”、“q23”、“q32”、“q14”、“q24”、“q34”)
的列创建48行数据帧,并使用顺序索引分配到正确的行=i+12*j,会更容易吗

 transRate<-function(period){
  estim<-data.frame(q12=1:48, q21=0, q23=0, q32=0, q14=0, q24=0, q34=0)))

  for(i in seq(1,12)){
    for(j in seq(0,3, by=1)){

    estim[ i+12*j , ] <- qmatrix.msm(cav.msm,  ci="normal", 
              covariates=list( grossTon = i*10, activ=j, period=period))$
                                                  estimates[c(5,2,10,7,13,14,15)]
       }
  }

    return(estim)                     
} 

dataFrame<-transRate(period=1)

transRate数据帧
estim
只有一列。这列恰好是一个矩阵。当您执行类似于
estim[i,j]
的操作时,您正在访问数据帧的列。我相信你真的想访问数据框内的矩阵。因此,如果你想填充矩阵,你必须使用一些类似于[code>estim[1][,c(i,j)]
的东西。

Rafael,你对一个问题有了一个很好的开始,但是你能添加更多关于你的函数应该产生的向量的信息吗?您当前的代码是否出现了某种错误?希望现在更清楚。
transRate<-function(period){
  estim<-data.frame(matrix(rep(0,336),336,1))

  for(i in seq(10,120,by=10)){
    for(j in seq(0,3, by=1)){

    estim[c(i,j)]<-qmatrix.msm(msm.Mult4,  ci="normal", covariates=list(grossTon=i, activ=j, period=period))$estimates[c(5,2,10,7,13,14,15)]
    outp[c(i,j)]<-c(estim[c(i,j)])#Here I'm trying to get my 336 values vector
    }
  }

  grosTvect<-sort(rep(seq(10,120,by=10),28))
  rate<-rep(c("q12","q21","q23","q32","q14","q24","q34"),48)
  estimRate<-data.frame(grosTvect,rate,outp)

  return(estimRate)                     
} 
dataFrame<-transRate(period=1)
error in `[<-.data.frame`(`*tmp*`, c(i, j), value = c(0.0614055886960195,  : 
  new columns would leave holes after existing columns
Error in `[<-.data.frame`(`*tmp*`, i, j, value = c(0.0614055886960195,  : 
  replacement has 7 rows, data has 1
 transRate<-function(period){
  estim<-data.frame(q12=1:48, q21=0, q23=0, q32=0, q14=0, q24=0, q34=0)))

  for(i in seq(1,12)){
    for(j in seq(0,3, by=1)){

    estim[ i+12*j , ] <- qmatrix.msm(cav.msm,  ci="normal", 
              covariates=list( grossTon = i*10, activ=j, period=period))$
                                                  estimates[c(5,2,10,7,13,14,15)]
       }
  }

    return(estim)                     
} 

dataFrame<-transRate(period=1)