ベクトルの場合と同様に、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 の結果として同じ長さの列を持つ行列を出力する必要があります。長さが異なる要素を含む別のリストを作成したくありません。