我想在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的结果。我不希望另一个列表具有不同的长度元素。
答案 0 :(得分:1)
实际上我刚刚意识到,如果我把我想要的列转换成矢量,这就完美了。所以:
> b[, 1][1:4]
[1] 1 2 3 NA