使用最后一个sapply输出作为下一个输入

时间:2015-07-12 15:45:18

标签: r lapply sapply

我想以一种方式使用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的原因是因为我的实际功能很复杂,它会在大型数据集上运行而且我不想等待很长时间。

感谢。

1 个答案:

答案 0 :(得分:2)

您可以将此功能Reduce用于此

Reduce(f=function(lhs,rhs) rhs-lhs,x=1:4,accumulate=TRUE)
#[1] 1 1 2 2

请注意,如果在大数据上运行它会很慢。

然后最好预先分配一个向量并通过for循环填充它(如@joran建议的那样)。