R使用小数作为索引号

时间:2018-10-23 14:50:35

标签: r indexing decimal

R文档说:

索引是数字或字符向量,或者为空(缺失)或NULL。数字值被as.integer强制转换为整数(因此被截断为零)。

例如,如果您拥有:

vector<-c(10,20,30,40,50)

并询问该向量的位置2,您将拥有:

vector[2];
20

但是,如果您要求索引为2.5,则会得到相同的结果

vector[2.5];
20

这是一个非常奇怪的行为。就我的目的而言,这是一种危险的行为。当您将十进制值用作数组或向量索引时,是否可以选择强制R返回错误?

1 个答案:

答案 0 :(得分:0)

一种可能性是使用所描述的行为定义向量类:

as.myvector <- function(x){
    class(x) <- c("myvector", class(x))
    x
}

`[.myvector` <- function(x, condition) {
    if(any(condition != as.integer(condition)))
        stop("Invalid index")
    class(x) <- class(x)[2]
    x[condition]
}

v <- as.myvector(c(10, 20, 30, 40, 50))

v[2]
## [1] 20
v[2.5]
## Error in `[.myvector`(v, 2.5) (from #2) : Invalid index
v[2:5]
## [1] 20 30 40 50
v[c(1.1,2:4)]
## Error in `[.myvector`(v, c(1.1, 2:4)) (from #2) : Invalid index