2017-07-04 7 views
1

行列の各インスタンスで関数の出力を行列に埋めようとしています。私は、エラー "交換長さゼロ"または "交換するアイテムの数が置換の長さの倍数ではありません"を取得します。関数の出力で行列を塗りつぶすR

助けてください!

setPoint <- function(tarray, t){ 
    var1 <- dim(tarray)[1] #get the length of longitudes, returns a number 
    var2 <- dim(tarray)[2] #get the length of latitudes, returns a number 
    empty.matrix <- matrix(nrow=var1,ncol=var2) 
    for (i in 1:var1) { #i is moving from 1 to 192 (longitude) 
     for (j in 1:var2) { #j moves from 1 to 145 (latitude) 
      tmp.point <- tarray[i,j,] 
      1my.vector <- c(1:var2) 
      my.vector[j] <- thresholdYear(tmp.point, 38,t,0.8) 
     } 
     empty.matrix[i,] <- my.vector 
    } 

} 
+0

'trarray'は何ですか?あなたはそれが行列だと言っていますが、あなたのコードはある時点で 'trarray [i、j、]'を読みます... –

+0

tarrayは次元(192,145,475)を持つ配列です。緯度、時間。私は時間の経過とともに各グリッドポイント(ベクトル)を入力したいと考えています。関数(thresholdYear)は、その年を出力するベクトルをとります。私はその関数の年の出力の行列を作成したい – Angela

+0

パッケージから 'thresholdYear'ですか? [mcve](https://stackoverflow.com/help/mcve)を与えることを検討してください。 –

答えて

0

まず、関数は何も返しません。 RのforループはNULLを返します。これが関数の返すものです。 2番目に、内部ループでmy.vectorを作成し、次の命令でその値の1つを書き換えます。ループを通る2回目の反復でそれを再現し、前の反復の値を破壊します。あなたがする必要があると思われることは、内側のループの外側にそれを作成することです。次のようなもの

setPoint <- function(tarray, t){ 
var1 <- dim(tarray)[1] #get the length of longitudes, returns a number 
var2 <- dim(tarray)[2] #get the length of latitudes, returns a number 
empty.matrix <- matrix(nrow=var1,ncol=var2) 
for (i in 1:var1) { #i is moving from 1 to 192 (longitude) 
     my.vector <- 1:var2 
    for (j in 1:var2) { #j moves from 1 to 145 (latitude) 
     tmp.point <- tarray[i,j,] 
     my.vector[j] <- thresholdYear(tmp.point, 38,t,0.8) 
    } 
    empty.matrix[i,] <- my.vector 
} 
empty.matrix 

}

関連する問題