我希望 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))
其中 factor 是一个大约 250 000 行的 xts。所以这需要大约 15 秒,这对我的应用程序来说太长了。
这很重要的原因是我应用它的每个列表元素都有不同的长度,但我需要输出一个具有相等长度列的矩阵作为 sapply 的结果。我不想要另一个包含不同长度元素的列表。