可与循环做,或申请或矢量。
> x <- c(1, 2, 3, 4, 5)
> r <- NA
> for (n in 2:length(x)) r[n] <- x[n]*x[n]-x[n-1]*x[n+1]
> (r)
[1] NA 1 1 1 NA
>
> r <- NA
> lapply(2:length(x),function(n) r[n] <<- x[n]*x[n]-x[n-1]*x[n+1])
[[1]]
[1] 1
[[2]]
[1] 1
[[3]]
[1] 1
[[4]]
[1] NA
> (r)
[1] NA 1 1 1 NA
> r <- NA
> r <- x^2 - c(NA,x[1:(length(x)-1)]) * c(x[2:length(x)],NA)
> (r)
[1] NA 1 1 1 NA
矢量是最有效的,但是代码是难以破译
> x <- runif(50000)
>
> r <- NA
> system.time(for (n in 2:length(x)) r[n] <- x[n]*x[n]-x[n-1]*x[n+1])
user system elapsed
8.55 0.01 8.58
>
> r <- NA
> system.time(lapply(2:length(x),function(n) r[n] <<- x[n]*x[n]-x[n-1]*x[n+1]))
user system elapsed
11.36 0.00 11.39
>
> r <- NA
> system.time(r <- x^2 - c(NA,x[1:(length(x)-1)]) * c(x[2:length(x)],NA))
user system elapsed
0.01 0.00 0.01
您更好地为初始化[R全长:r < - rep(NA,length(x)) – 2011-02-28 15:56:50