R apply()函数的问题,包括自定义函数。

问题描述 投票:0回答:2

我编写了以下函数。

one_way_anova <- function(m, n, sample_means, sample_vars) {
  keskiarvo = 1/m*sum(sample_means)
  otosv = (sum((sample_means-keskiarvo)^2))/(m-1)
  TS = (n*otosv)/(sum(sample_vars)/m)
  parvo = 1-pf(TS, m-1, m*(n-1))
  return(parvo)
}

并使用以下数据。

set.seed(1)
dat <- matrix(rnorm(300*20), nrow=300)
sample_means <- matrix(rowMeans(dat), nrow=100)
sample_vars <- matrix(apply(dat, 1, var), nrow=100)
m <- nrow(sample_means)
n <- ncol(sample_means)

现在我尝试使用 apply -用我的函数计算 "parvo"。one_way_anova 对于数据集 sample_means 由三个样本的单独行(矩阵是100x3)。apply(sample_means, 1, one_way_anova)

矩阵的误差如下Error in FUN(newX[, i], ...) : argument "sample_means" is missing, with no default

r function apply
2个回答
4
投票

由于您的函数 one_way_anova 需要多个参数,你需要传递除了 sample_means 如果你用 apply.

如果你想在下面的行上运行它,你可以在 sample_meanssample_vars,也许你可以试试 sapply 如下

sapply(1:m,function(k) one_way_anova(m,n,sample_means[k,],sample_vars[k,]))
© www.soinside.com 2019 - 2024. All rights reserved.