在 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 变量明确命名.然后您 运行 以相当直接的方式进行分析。希望这对您有所帮助!
我正在尝试 运行 使用 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 变量明确命名.然后您 运行 以相当直接的方式进行分析。希望这对您有所帮助!