0

私はこの短い関数を持っています:

  1. 変換行列、初期ベクトル、および変換数を取得します
  2. 結果のベクトルを計算し、それらをデータ フレームにスタックする
  3. データ フレーム変数をプロットし、データ フレームを返す

ここに私の機能があります:

###### initvec _ initial vector
###### matrv _ transformation matrix
###### ns _ number of simulations
markovforplot<-function(initvec,matrv,ns) {
  ns <- as.integer(ns)
  initvec <- c()
  exposant <- c(1:ns)

  for (i in 1:ns) {
    library(expm)
    toprint<-apply((matrv %^% i)*initvec,2,sum)
    dataf <- data.frame(exposant=exposant,toprint=toprint)
    plot(dataf$exposant, dataf$toprint, type="l")
  }
  return(dataf)
}

適切にフォーマットされた行列とベクトルでテストする場合

(markovforplot(initvec=initvec,matrv=m,ns=20) 

返されるエラーは次のとおりです。

Error in apply((matrv %^% i) * initvec, 2, sum) : 
  dims [product 16] do not match the length of object [0]
4

1 に答える 1

0

関数には次の行があります。

R> initvec <- c()
R> initvec
NULL

これはinitvec空のベクトルに設定されます。つまり、渡された引数を上書きします。

于 2013-11-05T09:26:30.233 に答える