在R中,可以超出索引索引返回矩阵上的NAs,就像它在向量上一样吗?

时间:2013-06-15 17:56:19

标签: r indexing

我想在R中的矩阵上有一个超出边界的下标来返回NAs而不是错误,就像它在向量上一样。

> 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测试来查看rownames中是否存在索引变量,但是对于大型数据结构,这需要花费相当多的时间。这是一个例子:

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

其中因子是xts,大约250 000行。所以它需要大约15秒,这对我的应用来说太长了。

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

1 个答案:

答案 0 :(得分:1)

实际上我刚刚意识到,如果我把我想要的列转换成矢量,这就完美了。所以:

> b[, 1][1:4]
[1]  1  2  3 NA