我想创建一个向量,该向量将允许负索引,例如-100到100。这意味着执行G [-50]会选择位置-50的元素,而不是除-50之外的所有元素。你们能帮我这个忙吗? 谢谢。
答案 0 :(得分:3)
您可以使用命名向量
x <- 1:201
names(x) <- c(-100:100)
x["-100"]
-100
1
索引将是相同的,但是如果在其周围加上引号,您仍然可以按照所需的方式访问头寸
答案 1 :(得分:2)
R中的数字索引必须为正数,因此无法执行所需的操作。不过,这里有一些解决方法:
如果您知道最小值是多少(即索引可以从-100
到100
),只需将该数字(+1
)添加到索引中。因此,您有了df[-100]
df[1]
您可以将正索引和负索引分为两个向量。因此,您可以使用df[-50]
代替df[[negative]][50]
。
请参见以下示例:
df <- list('pos' = c(1, 2, 3, 4, 5),
'neg' = c(-1, -2, -3, -4, -5))
neg_index <- function(df, i) {
if (i > 0) {
return(df[['pos']][i])
} else if (i < 0) {
return(df[['neg']][abs(i)])
} else {
return(NULL)
}
}
neg_index(df, -2)
[1] -2
neg_index(df, 4)
[1] 4
答案 2 :(得分:1)
您可以使用dictionary。
> library(hashmap)
> H <- hashmap(-100:100, 1:201)
> H[[-50]]
[1] 51
答案 3 :(得分:0)
这是一件奇怪的事情。您可以决定创建类来执行此操作。尽管我不建议您继续这样做:因此,我将调用类weird
weird = function(x,pos = NULL){
stopifnot(length(x)%%2==1)
s = seq_along(x)
names(x) = s-floor(median(s))
class(x) = "weird"
x
}
print.weird = function(x) print(c(unname(x)))
`[.weird` = function(i,j) unname(.Primitive("[")(unclass(i),as.character(j)))
(s = weird(-10:10))
[1] -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7
[19] 8 9 10
如您所见,这只是-10:10的正常向量,您看不到的是此s
的类为weird
。您可以通过进行class(s)
现在就做:
s[-1]
[1] -1
> s[-10]
[1] -10
> s[0]
[1] 0
> s[3]
[1] 3
此外,如果需要使用它,则必须指定索引0
的位置。例如m = 1:5
应该是m[0]
是什么?然后您可以相应地更改功能