R 如何对引用I+的数组元素执行数学运算;1还是i-1索引?

R 如何对引用I+的数组元素执行数学运算;1还是i-1索引?,r,dplyr,R,Dplyr,我几乎可以用任何语言编写以下代码subtractPrevious获取一个数组,并从ith值中减去i+1st值。如何使用R进行此类计算?它看起来像是一个用于lappy的工作,或者可能是一个dplyr函数 x <- c(1,2,3,4,5,6,7,8,9,10) subtractPrevious <- function(x){ for (i in 1:length(x)){ if (i == 1) { y[1] <- NA

我几乎可以用任何语言编写以下代码
subtractPrevious
获取一个数组,并从
i
th值中减去
i+1
st值。如何使用R进行此类计算?它看起来像是一个用于
lappy
的工作,或者可能是一个
dplyr
函数

x <- c(1,2,3,4,5,6,7,8,9,10)
subtractPrevious <- function(x){
    for (i in 1:length(x)){
       if (i == 1) {
           y[1] <- NA
       } else {
           y[i] <- x[i] - x[i-1]
       }
    }
    return(y)
}

y <- subtractPrevious(x)
x我用这个:

   y <- x - c(0,x[1:length(x)-1])
y我用这个:

   y <- x - c(0,x[1:length(x)-1])

y这有一个内置函数
diff

c(NA,diff(x))

这有一个内置函数
diff

c(NA,diff(x))

虽然这个答案可能是正确和有用的,但如果您在答案中包含一些解释,以解释它如何帮助解决问题,则更可取。这在将来变得特别有用,如果有一个变化(可能无关)导致它停止工作,并且用户需要了解它曾经是如何工作的。当然。但这是向量和c运算符的最基本用法,两者都是R的核心。参见
diff
可能更适合于此-它有一个
lag=
参数,您可以指定要返回的距离。例如,
c(rep(NA,n),diff(x,lag=n))
作为一种通用模式将起作用。是的,但diff只适用于diff。这使用了向量子集,这对事物的世界是有用的,并且是R的基础。Hadley Wickham花了整整一章讨论子集,但几乎没有提到差异,这并不是毫无意义的。但我想这是一个品味的问题。奇怪的是,我得到了这个答案。这是一个非常简单的答案,也是一种非常常见的技术。我承认diff不太容易出错。这是一个优势。虽然这个答案可能是正确和有用的,但如果你在答案中加入一些解释来解释它是如何帮助解决问题的,你会更喜欢这个答案。这在将来变得特别有用,如果有一个变化(可能无关)导致它停止工作,并且用户需要了解它曾经是如何工作的。当然。但这是向量和c运算符的最基本用法,两者都是R的核心。参见
diff
可能更适合于此-它有一个
lag=
参数,您可以指定要返回的距离。例如,
c(rep(NA,n),diff(x,lag=n))
作为一种通用模式将起作用。是的,但diff只适用于diff。这使用了向量子集,这对事物的世界是有用的,并且是R的基础。Hadley Wickham花了整整一章讨论子集,但几乎没有提到差异,这并不是毫无意义的。但我想这是一个品味的问题。奇怪的是,我得到了这个答案。这是一个非常简单的答案,也是一种非常常见的技术。我承认diff不太容易出错。这是一个优势。这不是本质上的
diff
函数,在开始时用NA填充吗?这不是本质上的
diff
函数,在开始时用NA填充吗?