2

ベクトルの場合と同様に、R の行列の範囲外の添え字がエラーではなく NA を返すようにしたいと考えています。

> a <- 1:3
> a[1:4]
[1]  1  2  3 NA
> b <- matrix(1:9, 3, 3)
> b
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
> b[1:4, 1]
Error: subscript out of bounds
> 

だから私はそれが戻ってくるのが好きだったでしょう:

[1]  1  2  3 NA

現在、行名にインデックス変数が存在するかどうかを確認するために ifelse テストを使用してこれを行っていますが、大きなデータ構造ではかなりの時間がかかります。以下に例を示します。

s <- split(factors, factors$date) # split so each date has its own list
names <- last(s)[[1]]$bond # names of bonds that we want
cdmat <- sapply(names, function(n)
                sapply(s, function(x)
                       if(n %in% x$bond) x[x$bond == n, column] else NA))

ここで、factors は約 250,000 行の xts です。つまり、約 15 秒かかり、私のアプリケーションには長すぎます。

これが重要な理由は、これを適用する各リスト要素の長さが異なるためですが、sapply の結果として同じ長さの列を持つ行列を出力する必要があります。長さが異なる要素を含む別のリストを作成したくありません。

4

1 に答える 1