【问题标题】:Returning head and tail means from list of vectors从向量列表中返回头尾意味着
【发布时间】:2014-06-05 19:52:03
【问题描述】:

我需要计算不同长度向量列表顶部 x 和底部 x 部分的平均值(或其他汇总函数)。

这里是 3 个不同长度的向量列表,格式与我正在使用的相似:

t <- list(a = exp(-4:3), b = exp(-2:12), c = exp(-5:3))

理想情况下,我希望每种类型的均值都有一个数字向量(我手动运行 mean(head(t$a),2)) 和 mean(tail(t$a),2)) 为每个向量):

理想的输出产生一个无名向量,每个向量的前两个元素的均值:

[1] 0.2516074   1.859141    0.09256118

每个向量中最后两个条目的第二个均值向量:

[1] 1.859141    15064.77    1.859141

寻找一个聪明的 lapply-type 构造来为每个方法获取一个数字向量,而不需要附加名称(在本例中为 a、b、c)。谢谢!

【问题讨论】:

  • unname(lapply(t, function(x) c(mean(head(x, 2)), mean(tail(x, 2)))))。顺便说一句,可能不想使用 t 作为变量名,因为它是一个基本的 R 函数。

标签: r


【解决方案1】:

怎么样

n = 2
v = lapply(t, function(i) mean(head(i, n)))

变量v 是列表。所以要得到一个向量,只需使用unlist

v = unlist(v)

要提取数字,请使用as.vector

as.vector(v)

对于尾部,只需使用

lapply(t, function(i) mean(tail(i, n)))

【讨论】:

  • 我猜你的意思是让其中一个说tail。 :)
【解决方案2】:

使用sapply你可以把它包装在一个函数中:

sapply(dat,function(x,length=2)
  c(mean(head(x,length)),mean(head(x,length))))
# a         b          c
# [1,] 0.03405135 0.2516074 0.01252679
# [2,] 0.03405135 0.2516074 0.01252679

【讨论】:

    猜你喜欢
    • 2015-01-19
    • 2021-04-30
    • 2019-02-16
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 2021-08-02
    相关资源
    最近更新 更多