【问题标题】:use function on multiple columns (variables) in r在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 相对较新,并且经常将相同的函数应用于多个变量(通常通过多次复制代码),所以了解如何正确使用这些函数会很棒:)

【问题讨论】:

    标签: r lapply sapply tapply


    【解决方案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 函数,但显然我需要检查我的处方。相应地更新了我的帖子,对此感到抱歉
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多