gpt4 book ai didi

r - R 中的基于零的数组/向量

转载 作者:行者123 更新时间:2023-12-04 10:09:28 30 4
gpt4 key购买 nike

有什么方法可以让 R 对向量和其他序列数据结构使用基于零的索引,例如在 C 和 python 中。

我们有一些代码在 C 中进行一些数值处理,我们正在考虑将其移植到 R 中以利用其先进的统计功能,但是缺乏(根据我在谷歌搜索后的理解)基于零的索引使得任务有点更加困难。

最佳答案

TL; DR:不要这样做!

我不认为基于零/一的索引是将 C 代码移植到 R 的主要障碍。
但是,如果您真的认为有必要这样做,您当然可以覆盖 .Primitive('[')函数,改变 R 中索引/子集的行为。

# rename the original `[`
> index1 <- .Primitive('[')

# WICKED!: override `[`.
> `[` <- function(v, i) index1(v, i+1)
> x <- 1:5
> x[0]
[1] 1
> x[1]
[1] 2
> x[0:2]
[1] 1 2 3

但是,这可能非常危险,因为您更改了基本的索引行为,并且可能会对所有使用子集和索引的库和函数造成意外的级联效果。

例如,因为子集和索引可以接受其他类型的数据作为选择器(比如 bool 向量),而简单的覆盖函数没有考虑到这一点,所以您可能会出现非常奇怪的行为:
> x[x > 2] # x > 2 returns a boolean vector, and by + 1, you convert 
# boolean FALSE/TRUE to numeric 0/1
[1] 1 1 2 2 2

虽然这可以通过修改覆盖函数来解决,但您仍然可能遇到其他问题。

另一个例子:
> (idx <- which(x > 2)) # which() still gives you 1-based index
> x[idx]
[1] 4 5 NA

你永远不知道哪里可能会出错。所以,不要。

关于r - R 中的基于零的数组/向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25307549/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com