我正在尝试创建一个公式,该公式可用于快速检查不同变量的正态性。我是R的新手,不确定如何继续。这是我的尝试,但不起作用:
normality_test <- function(my_data) { shapiro.test(my_data$"x") }
我的目标是能够使用如下公式:
normality_test("variable name")
使用[[
访问列数据。
normality_test<- function(my_data, col) shapiro.test(my_data[[col]])
您可以将其用作:
normality_test(my_data, "var1")
normality_test(my_data, "var2")
要对所有列应用normality_test
,可以使用:
result <- lapply(names(my_data), normality_test, my_data = my_data)
但是,如果要对所有列运行此操作,则可以直接使用
result <- lapply(my_data, shapiro.test)
无需创建normality_test
函数。
这里是您的可行解决方案。与您的主要区别在于,使用[]表示法而不是$表示法来进行变量提取,并且我的为函数提供了数据和变量名。确保仅选择数字变量或可以强制使用的变量,以便与函数一起使用。另外,由于该函数现在有两个参数,第一个是数据,因此您可以使用marnitrr
管道(%>%)使其更具可读性,并可以在数据集上使用该函数。
test <- mtcars
normality_test<- function(my_data, x) {
return(shapiro.test(as.numeric(my_data[,x])))
}
normality_test(test, "qsec")