我正在尝试编写函数来计算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函数。我无法弄清楚平均值周围的样本时刻的代码;我需要访问列表中的每个元素,从平均值中减去它,然后将其提升到适当的幂。使用索引没有用,所以我的主要问题是:如何引用列表中的每个元素?
答案 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))
}
请注意,事先计算mu
和n
是一项(次要)效率提升 - 否则会计算四次。
要引用向量的元素,请使用方括号:例如x[2]
。