计算R中的样本矩(原始代码)

时间:2013-10-30 00:10:23

标签: r

我正在尝试编写函数来计算0和周围平均值的样本矩,从1阶到4阶。我得到了第一个,但我遇到第二个问题。这是我的代码:

moment.zero <- function(x) {
  lapply(1:4, function(i) (1/length(x$elements)) * sum(x$elements^i))
}

moment.mean <- function(x) {
  lapply(1:4, function(i) (1/length(x$elements)) * sum(x$elements #mistake is here - mean(x$elements))^i)
}

我不应该使用循环,所以我使用了lapply函数。我无法弄清楚平均值周围的样本时刻的代码;我需要访问列表中的每个元素,从平均值中减去它,然后将其提升到适当的幂。使用索引没有用,所以我的主要问题是:如何引用列表中的每个元素?

1 个答案:

答案 0 :(得分:1)

moment.zero <- function(x) {
  n <- length(x)
  sapply(1:4, function(i) (1/n) * sum(x^i))
}

moment.mean <- function(x) {
  mu <- mean(x)
  n <- length(x)
  sapply(1:4, function(i) (1/n) * sum((x - mu)^i))
}

请注意,事先计算mun是一项(次要)效率提升 - 否则会计算四次。

要引用向量的元素,请使用方括号:例如x[2]