我在R中的xts包中使用last()函数时发现了一个奇怪的错误。
我有一个dim 740 * 1的xts对象,但是last(data,1)返回错误:
> tail(data)
[,1]
2017-02-28 2.092
2017-03-01 2.093
2017-03-02 NA
2017-03-03 NA
2017-03-06 NA
2017-03-07 NA
> dim(data)
[1] 740 1
> last(data,1)
Error in x[[order(order_by)[n]]] : subscript out of bounds
你能帮我理解为什么会这样吗?
答案 0 :(得分:4)
当函数被另一个也在R会话中加载的包中的相同函数名掩盖时,就会发生这种情况。
dplyr::last(data, 1)
x [[order(order_by)[n]]]中的错误:下标越界
last(data, 1)
# [,1]
#2017-04-11 5
在上面,dplyr
last
被xts::last
掩盖了,所以在这种情况下它运行良好。根据加载包的顺序(这里我们在xts
之后加载dplyr
)可能会发生这种情况。假设,我们在dplyr
之后加载xts
进行了新的R
会话,反之亦然
library(xts)
#Loading required package: zoo
#Attaching package: ‘zoo’
#The following objects are masked from ‘package:base’:
#as.Date, as.Date.numeric
library(dplyr)
#Attaching package: ‘dplyr’
#The following objects are masked from ‘package:xts’:
#first, last ####note this line
data <- xts(1:5, order.by = Sys.Date()+1:5)
last(data, 1)
x [[order(order_by)[n]]]中的错误:下标越界
此处,选项是使用::
xts::last(data, 1)
# [,1]
#2017-04-11 5
data <- xts(1:5, order.by = Sys.Date()+1:5)