我想从apply-function中仅提取p值。我在几个柱子(A-D)上做了几个统计测试(shapiro-test,kruskal-Vallis和ANOVA)。它可以自动运行,但我总是将整个列表作为结果。
我的data.frame是calles data1。
b< -apply(data1 [,c(" A"," B"," C"," D")] ,2,shapiro.test); b
如果我将$ p.value或$ p.val添加到函数中,结果显示" NULL" ("零&#34)。
b< -apply(data1 [,c(" A"," B"," C"," D")] ,2,shapiro.test)$ p.val
B $ p.val NULL
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
S.R,
使用apply
,您将获得shapiro.test
对象的列表。要将此列表中的值提取到data.frame中,您可以:
b<-apply(data1[,c("A", "B","C","D")],2,shapiro.test)
do.call(rbind,lapply(b,function(v){v$p.value}))
这将为您提供一个data.frame,每行p.value
。
使用mtcars
构建可重现的示例:
b<-apply(mtcars[,c("disp","hp","drat","wt","qsec")],2,shapiro.test)
do.call(rbind,lapply(b,function(v){v$p.value}))
产生p.value
值的data.frame。
[,1]
disp 0.02080657
hp 0.04880824
drat 0.11006076
wt 0.09265499
qsec 0.59351765