如何将函数输出到矩阵中

时间:2018-03-11 17:26:57

标签: r time integer markov

我对R很新,所以这是一个我遇到问题的问题。

我目前正在使用第一次迭代到第45次的马尔可夫链。我需要在这样的函数中使用后续的n和n + 1迭代:

bk<-function(n)((B[(n+1)]-B[n])/(B[n]-0.1818182))

然而,我需要它,它只计算它,使N只是一个整数。我尝试使用for循环,但它似乎无法正常工作。

for (n in 0:45){
  bk<-function(n)(B[(n+1)]-B[n])/(B[n]-0.1818182)
  if(bk=0)
    next
  print(bk)
  }

for循环告诉我“}”中的“错误:意外'}'

(我想要的是计算N的函数,IFF N是一个整数。当N不是整数时,结果值为0,这就是我使用for循环来消除这些值的原因)

这就是B

B
 [1] 1.0000000 0.8000000 0.6600000 0.5560000 0.4764000 0.4145600 0.3661360 0.3280400 0.2979758 0.2741956 0.2553518
[12] 0.2403975 0.2285151 0.2190636 0.2115391 0.2055441 0.2007647 0.1969524 0.1939101 0.1914812 0.1895416 0.1879922
[23] 0.1867542 0.1857649 0.1849741 0.1843419 0.1838365 0.1834324 0.1831093 0.1828509 0.1826442 0.1824789 0.1823467
[34] 0.1822409 0.1821564 0.1820887 0.1820346 0.1819913 0.1819567 0.1819290 0.1819068 0.1818891 0.1818749 0.1818636
[45] 0.1818545 0.1818472
> 

##Where B Comes from 
B<-c(intialstate1[,2])

马尔可夫链是使用马尔可夫链包装制作的

MCMolFrac<-new("markovchain",
               states=c("B","C","D","E"),
               transitionMatrix=matrix(data=c(0.8,0.2,0,0,0.1,0.6,0.2,0.1,0,0.2,0.8,0,0,0.4,0,0.6),byrow =TRUE,ncol=4), 
               name= "Unimolecular Reaction Distribution")
               
initialstate<-c(1,0,0,0)

fvals<-function(mchain,initialstate,n) {
  out<-data.frame()
    names(initialstate)<-names(mchain)
    for (i in 0:n)
     {
      iteration<-initialstate*mchain^(i)
      out<-rbind(out,iteration)
      }
  t<-cbind(out, i=seq(0,n))
  out<-out[,c(4,1:3)]
 return(out)
  }
  
  intialstate1<-data.frame(fvals(mchain = MCMolFrac, initialstate= c(1,0,0,0),n=45))
  
  ##leadingtoVectorBformationAbove

基本上,我需要创建一个离散的时间动态系统。这样我就可以将输出变成矩阵/向量,这样我就可以将其绘制成类似

的图形

Graph of Final Product, the different colours are different datasets

谢谢

0 个答案:

没有答案