在向量的多个子集上使用apply函数

时间:2014-06-26 20:52:34

标签: r apply lapply mapply

我一直在寻找解决方案一段时间,但似乎没有任何东西可以解决这个看似简单的问题。

长话短说,我希望在向量的多个子集上运行一个函数,但我试图避免for循环。

作为一个简单的例子

x <- runif(20)

index <- round(runif(10,1,10))
[1] 7 8 4 6 9 3 1 2 8 7

现在我要做的是运行一个应用函数,该函数可以找到x的最后7个条目的(让我们说的)平均值,然后是x的最后8个条目{1}},然后x等的最后4个条目等。

这将以某种方式使用tail(x, n)函数,但我得到了错误的结果,因为apply函数系列将为其传递的参数中的每个元素返回一个结果(如mapply) )因为length(x) != length(index)而无法工作,或者传递的对象中的每个元素都有一个结果(在这种情况下,是x的20个元素)。我希望得到10种手段作为输出。

思考?如果我能在某种程度上澄清这个例子,请告诉我。

1 个答案:

答案 0 :(得分:1)

您仍然可以使用xapply个功能。您可以尝试以下方式:

set.seed(1)
x <- runif(20)
index <- round(runif(10,1,10))
## [1] 5 5 9 8 4 1 4 6 3 9
sapply(index, function(n) mean(tail(x, n)))
## [1] 0.4622008 0.4622008 0.5185548 0.5222463 0.4519646 0.2787476 0.4519646
## [8] 0.4939800 0.2748015 0.5185548

只是为了检查:

mean(tail(x, 5))
## [1] 0.4622008
mean(tail(x, 9))
## [1] 0.5185548

希望它有所帮助,

亚历