R文档说:
索引是数字或字符向量,或者为空(缺失)或NULL。数字值被as.integer强制转换为整数(因此被截断为零)。
例如,如果您拥有:
vector<-c(10,20,30,40,50)
并询问该向量的位置2,您将拥有:
vector[2];
20
但是,如果您要求索引为2.5,则会得到相同的结果
vector[2.5];
20
这是一个非常奇怪的行为。就我的目的而言,这是一种危险的行为。当您将十进制值用作数组或向量索引时,是否可以选择强制R返回错误?
答案 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