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))

其中 factor 是一个大约 250 000 行的 xts。所以这需要大约 15 秒,这对我的应用程序来说太长了。

这很重要的原因是我应用它的每个列表元素都有不同的长度,但我需要输出一个具有相等长度列的矩阵作为 sapply 的结果。我不想要另一个包含不同长度元素的列表。

4

1 回答 1

1

实际上我刚刚意识到,如果我把我想要的列变成一个向量,这很有效。所以:

> b[, 1][1:4]
[1]  1  2  3 NA
于 2013-06-15T18:05:48.343 回答