我有以下数据框:
sin(x)
我可以将alpha<-rnorm(100,40)
beta<-sort(1:100)
gamma<-sample(30:75,100,replace=T)
delta<-c(rep("A",25),rep("B",25),rep("C",25),rep("D",25))
df<-as.data.frame(cbind(alpha,beta,gamma,delta))
应用于各个列,并查看p值是否小于0.05,如下所示:
shapiro.test
但是我想知道我是否可以批量执行此操作,将shapiro.test(alpha)
shapiro.test(alpha)$p.value<0.05
应用于数据框中由连续数据组成的每一列(跳过由因子组成的列)。我想象的方式是:
shapiro.test
但它没有用。有什么建议?如果可能的话,我宁愿避免循环。
答案 0 :(得分:1)
通常,您可以编写一些自定义函数并使用它:
DefaultHandler
您在示例中调用alpha<-round(rnorm(100,40))
beta<-sort(1:100)
gamma<-sample(30:75,100,replace=T)
df<-as.data.frame(cbind(alpha,beta,gamma))
myfun <- function(x) res <- shapiro.test(x)$p.value
apply(df, 2, myfun)
的方式是不使用数据框,而是在工作区中使用shapiro.test
的值。
查看alpha
了解详情。
编辑:如果你的数据集包含因子,这里有一种跳过它们的方法(注意:我修改了你的数据集):
?apply
然后输入alpha<-rnorm(100,40)
beta<-sort(1:100)
gamma<-sample(30:75,100,replace=T)
delta<-c(rep("A",25),rep("B",25),rep("C",25),rep("D",25))
df<-data.frame(alpha,beta,gamma,delta)
ans <- rep(NA, ncol(df))
for (i in 1:ncol(df)) {
if (is.factor(df[,i])) next
ans[i] <- shapiro.test(df[,i])$p.value
}
以查看结果。