【问题标题】:Using an apply function on multiple subsets of a vector在向量的多个子集上使用应用函数
【发布时间】:2014-08-17 20:49:21
【问题描述】:

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

长话短说,我希望在向量的多个子集上运行一个函数,但我试图避免 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 个条目,然后是最后 4 个条目x,等等等等。

这将以某种方式使用 tail(x, n) 函数,但我得到了错误的结果,因为 apply 系列函数将为其传递的参数中的每个元素返回一个结果(如在 mapply 中),这不会因为length(x) != length(index) 或传递对象中的每个元素(在本例中为 x 的 20 个元素),所以无法工作。我希望得到 10 个均值作为输出。

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

【问题讨论】:

    标签: r apply lapply mapply


    【解决方案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
    

    希望对你有帮助,

    亚历克斯

    【讨论】:

      猜你喜欢
      • 2019-09-15
      • 1970-01-01
      • 1970-01-01
      • 2015-09-07
      • 2018-02-25
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多