我目前正在使用markovchain包进行分析。
我有(a,b,c,d)状态,
我需要输出一个数据集,其中包含每次迭代时a,b,c,d的比例。我的代码是:
library(markovchain)
state<-c("a", "b","c","d");
tp<-matrix(data=c(0.721, 0.202,0.067,0.010,0,0.581,0.407,0.012,0,0,0.75,0.25,0,0,0,1),byrow=T, nrow=4, dimnames=list(state,state));
s0<-c(1,0,0,0)
mcHIV<-new("markovchain", states=state,byrow=T,transitionMatrix=tp,name="HIV")
sq1<-seq(1,20)
s<-NULL
for (n in 1:20){s[n]<-mcHIV^sq1[n]};
s [n]&lt; - mcHIV ^ sq1 [n]中的错误: 向量分配中的无效类型/长度(S4 / 0)**
我怎么处理这个?
答案 0 :(得分:1)
由于输出是矩阵,您需要创建一个列表:
s <- list()
for (n in 1:20){s[[n]] <- mcHIV^sq1[n]};
列表的每个元素s[[1]]
,s[[2]]
,...,s[[k]]
将在迭代后引用转换矩阵的状态k
以编程方式执行此操作的更好方法是使用lapply
返回对象列表,在本例中为转换矩阵:
iter <- 20
s <- lapply(seq(iter), function(k) mcHIV^k)
s[[1]]
,s[[2]]
,...,s[[k]]
答案 1 :(得分:0)
for (n in 1:20){s<-c(s,mcHIV^sq1[n])};
您可以创建一个矩阵列表来存储所需的结果。