gpt4 book ai didi

r - 在 R 中围绕统计测试编写函数

转载 作者:行者123 更新时间:2023-12-05 02:55:58 24 4
gpt4 key购买 nike

我正在为我的(工作中的)R 脚本编写一个函数以清理我的代码。我没有编写函数的经验,但决定我应该花一些时间在这上面。我的函数的目标是执行多个统计测试,同时只传递所需的数据框、定量变量和分组变量一次。但是,我无法让它工作。为了您的引用,我将使用 ToothGrowth 数据框来说明我的问题。

假设我想在 len 上运行 Kruskal-Wallis 检验和单向方差分析,以比较名为 supp 的不同组,无论出于何种原因。我可以单独使用

kruskal.test(len ~ supp, data = ToothGrowth)
aov(len ~ supp, data = ToothGrowth)

现在我想编写一个函数来执行这两个测试。这是我认为应该起作用的:

stat_test <- function(mydata, quantvar, groupvar) {
kruskal.test(quantvar ~ groupvar, data = mydata)
aov(quantvar ~ groupvar, data = mydata)
}

但是如果我随后运行 stat_test(ToothGrowth, "len", "sup"),我会得到错误

Error in kruskal.test.default("len", "supp") : 
all observations are in the same group

我做错了什么?任何帮助将不胜感激!

最佳答案

您可以使用 deparse(substitute(quantvar)) 获取您传递给函数的列的引用名称,这将允许您使用 paste< 构建公式。这是在 R 中更惯用的操作方式。

这是一个可重现的例子:

stat_test <- function(mydata, quantvar, groupvar) {
A <- as.formula(paste(deparse(substitute(quantvar)), "~",
deparse(substitute(groupvar))))
print(kruskal.test(A, data = mydata))
cat("\n--------------------------------------\n\n")
aov(A, data = mydata)
}

stat_test(ToothGrowth, len, supp)
#>
#> Kruskal-Wallis rank sum test
#>
#> data: len by supp
#> Kruskal-Wallis chi-squared = 3.4454, df = 1, p-value = 0.06343
#>
#>
#> --------------------------------------
#> Call:
#> aov(formula = A, data = mydata)
#>
#> Terms:
#> supp Residuals
#> Sum of Squares 205.350 3246.859
#> Deg. of Freedom 1 58
#>
#> Residual standard error: 7.482001
#> Estimated effects may be unbalanced

reprex package 创建于 2020-03-30 (v0.3.0)

关于r - 在 R 中围绕统计测试编写函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60928736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com