r - 在向量的多个子集上使用应用函数

标签 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 个条目,然后是 x 的最后 4 个条目,等等。

这将以某种方式使用 tail(x, n) 函数,但我一直得到错误的结果,因为 apply 函数族将为其其中的每个元素返回一个结果传递的参数(就像在 mapply 中一样)因为 length(x) != length(index) 而不起作用,或者传递对象中每个元素的一个结果(在本例中,20 个元素X)。我希望得到 10 个均值作为输出。

想法?让我知道我是否可以稍微澄清一下这个例子。

最佳答案

您仍然可以使用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

希望对你有帮助

亚历克斯

关于r - 在向量的多个子集上使用应用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24440030/

相关文章:

R 数据表不会同时显示按钮和长度菜单

r - 如何评估和修复 “subscript out of bounds”错误?

python pandas DataFrame 遍历行并比较两列并应用函数

R:将多个 csv 文件的摘要合并到一个数据框中

r - 转换为循环应用

r - 禁用保存历史记录

R - 获取两个矩阵具有相同行的行号

python - Pandas - 删除重复行,但另一列中具有最高值的行除外

R - 分割数据、回归并将方程应用于新的分割数据集

r - 为列表中的每个数据框创建一个包含列总和的新行