1

我正在尝试编写函数来计算从一阶到四阶的 0 左右和平均值附近的样本矩。我把第一个打倒了,但我对第二个有问题。这是我的代码:

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 函数。我无法弄清楚平均值附近的示例时刻的代码;我需要访问列表中的每个单独元素,从平均值中减去它,然后将其提高到适当的幂。使用索引没有帮助,所以我的主要问题是:如何引用列表中的每个元素?

4

1 回答 1

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].

于 2013-10-30T00:15:50.337 回答