在 r 中的多列(变量)上使用函数

use function on multiple columns (variables) in r

我正在尝试 运行 使用 car 包中的 leveneTest 函数测试方差齐性。我可以 运行 像这样对单个变量进行测试(以 iris 数据集为例)

library(car)
library(datasets)

data(iris)

leveneTest(iris$Sepal.Length, iris$Species)

但是,我想 运行 同时对数据集中的所有因变量进行测试(所以 Sepal.Length、Sepal.Width、Petal.Length、Petal.Width).我猜它与 apply 函数族有关(sapply、lapply、tapply),但我就是不知道怎么办。我最接近的是这样的:

lapply(iris, leveneTest(group = iris$Species))

但是我收到错误

Error in leveneTest.default(group = iris$Species) : 
  argument "y" is missing, with no default

我的理解可能是因为它无法指定结果变量。我敢肯定我肯定遗漏了应用函数的一些明显用法,但我只是不明白它是什么。对这个基本问题表示歉意,但我对 R 比较陌生,并且经常将相同的函数应用于多个变量(通常通过多次复制代码),所以了解如何正确使用这些函数会很棒 :)

函数的常用参数需要在 lapply 内传递给 ...。像这样:

lapply(subset(iris, select = -Species), leveneTest, group = iris$Species)

help("lapply") 解释说 ... 用于 "optional arguments to FUN"(意思是 lapply 的可选而不是 FUN)并提供 lapply(x, quantile, probs = 1:3/4) 作为例如。

借助@Roland 的回答,您也可以在 base R 中执行以下操作:

lapply(iris[,-5], leveneTest, group = iris$Species

-5 显然特定于 iris 数据集。您可以将其替换为

之类的变量
lapply(iris[,-length(iris)]....

这会让你删除 df 的最后一个元素,假设你的分组变量是最后一个。

此外,作为 data.table 粉丝,如果您有兴趣,我会添加一个选项供您使用。

dt.iris[, lapply(.SD, leveneTest, group = Species), .SDcols = !'Species']

此代码使您能够以与上述基本 R 示例类似的方式从 lapply 函数中 'remove' Species 列,但通过 .SD 和 .SDcols 变量明确命名.然后您 运行 以相当直接的方式进行分析。希望这对您有所帮助!