我想以一种方式使用sapply,即sapply的最新值输出成为sapply的下一个输入。在下面的例子中,我创建了向量a =(1,NA,NA,NA),并希望sapply返回向量a =(1,1,2,2)。基本上,对于[2:4],我希望输出为2-1 = 2,3-1 = 2,4 = 2 = 2
a <- NA
a[1] <- 1
a[2:4] <- sapply(2:4, function(x) x- a[x-1])
如果你运行它,你会看到它返回一个=(1,1,NA,NA),因为它使用现有的向量而不是“实时”向量。
作为for循环,它的工作方式如下:
a <- NA
a[1] <- 1
for (ii in 2:4){
a[ii] <- ii-a[ii-1]
}
我想要使用sapply的原因是因为我的实际功能很复杂,它会在大型数据集上运行而且我不想等待很长时间。
感谢。
答案 0 :(得分:2)
您可以将此功能Reduce
用于此
Reduce(f=function(lhs,rhs) rhs-lhs,x=1:4,accumulate=TRUE)
#[1] 1 1 2 2
请注意,如果在大数据上运行它会很慢。
然后最好预先分配一个向量并通过for
循环填充它(如@joran建议的那样)。