web-dev-qa-db-ja.com

Rのループ:出力を保存する方法は?

論理テストのループからデータを保存しようとしています。

だから私は次のデータを持っています:

T1 <- matrix(seq(from=100000, to=6600000,length.out=676),26,26) # a matrix of 26X26 - here with illustrive values

minmax <- seq(from=1,to=49,by=1) # creates a sequence
Fstep <- 6569141.82/minmax       # define a vector from 0 to 6569141.82 with 49 divisions
F <- rev(round(Fstep,0))         # round the vector values and re order them
F

次のループを実行しました

for (i in 1:49) {
  print(T1 > F[i]) # I used print to see the results in the screen
}

このループは、論理値(TrueまたはFalse)で満たされた49個の行列を返します。各行列は、49個の位置F [i](F [1]、....、F [49])のそれぞれに対するT1の比較です。

ネットワークプロットの隣接行列としてさらに使用するには、これらの行列に値を含める必要があります。ただし、これらの論理値をマトリックスに割り当てることができない場合は、「write.matrix」を使用してそれらをcsv値に保存することもできません。

したがって、49個の行列「W」に論理値(TまたはF)を入力する必要があります。上記のループでこれらの値をすでに取得していますが、オブジェクトまたはcsvのコレクションとして取得できません。ファイル。

私は試した

W<-matrix(0,26,26) #create an empty matrix to assign the logical arguments
for (i in 1:49){
  W[i] <- T1>F[i] # I used print to see the results in the screen
}

次の警告を返します

Warning messages:
1: In W[i] <- (T1 > F[i]) :
  number of items to replace is not a multiple of replacement length

また、比較するすべての行列が同じ次元を持つ別の設定を試しました。

create.M <- function(F){ #  a function to transform  each position F[i] into a 26X26 matrix
  for (i in 1:49) {
    matrix(F[i],26,26)
  }
}

Loop.T1 <- function(T1){ #  a function to replicate T1(49 times)
  for ( i in 1:49) {
    T1
  }
}

2つの出力を比較しました

Loop.T1(T1)>create.M(F)

戻る

logical(0)
7
Philip Ueno

各ブール行列をリスト内の項目として格納します。

result <- vector("list",49)
for (i in 1:49)
{
   result[[i]] <- T1>F[i] # I used print to see the results in the screen
}

#Print the first matrix on screen
result[[1]]
9
joran

Joranが提案することを行う別の方法は、applyファミリーの関数を使用することです。

result2 <- lapply(F, function(f) {T1 > f})

これにより、joranのresultと同じものが得られます。これは、各要素がFの値の1つに対応し、その要素が26x26の論理行列であるリストです。

もう1つの方法は、結果を3次元論理行列(49 * 26 * 26)として格納することです。ここで、各スライスはFの値の1つに対応します。

result3 <- sapply(F, function(f) {T1 > f}, simplify="array")

その構造は

> str(result3)
 logi [1:26, 1:26, 1:49] FALSE FALSE FALSE FALSE TRUE TRUE ...
7
Brian Diggs