在r中的多列(变量)上使用函数
Posted
技术标签:
【中文标题】在r中的多列(变量)上使用函数【英文标题】:use function on multiple columns (variables) in r 【发布时间】:2020-05-27 12:48:11 【问题描述】:我正在尝试使用 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 相对较新,并且经常将相同的函数应用于多个变量(通常通过多次复制代码),所以了解如何正确使用这些函数会很棒:)
【问题讨论】:
【参考方案1】:函数的常用参数需要在lapply
内传递给...
。像这样:
lapply(subset(iris, select = -Species), leveneTest, group = iris$Species)
help("lapply")
解释说...
用于“FUN 的可选参数”(意思是lapply
不是FUN
的可选参数)并提供lapply(x, quantile, probs = 1:3/4)
作为示例。
【讨论】:
【参考方案2】:根据@Roland 的回答,您也可以在基础 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 函数中“删除” Species 列,但通过 .SD 和 .SDcols 变量显式命名。然后你以相当直接的方式运行你的分析。希望这会有所帮助!
【讨论】:
我只想说我的答案没有使用dplyr
。我不确定你是否在暗示这一点。
我的错误,我以为您的答案中包含了 dplyr 函数,但显然我需要检查我的处方。相应地更新了我的帖子,对此感到抱歉以上是关于在r中的多列(变量)上使用函数的主要内容,如果未能解决你的问题,请参考以下文章