如何将 mvn 测试的结果放在 R 中的 table 中?

How to put findings of mvn tests in a table in R?

我正在测试 Iris 数据集中的多元正态性。 我想比较 MVN 包下所有不同测试的结果(Mardia 的测试、Henze-Zikler、Royston、Doornik-Hansen 和 Energy 测试)并做了以下代码:

library(MVN) 
library(htmlTable)

attach(iris)

#Mardia's Test
Mar<-MVN::mvn(data=iris,subset="Species", mvnTest="mardia")
Mar$multivariateNormality

#Henze-Zirkler's Test
Hz<-MVN::mvn(data=iris,subset="Species",mvnTest="hz")
Hz$multivariateNormality

#Royston's Test
Roy<-MVN::mvn(data=iris,subset="Species", mvnTest="royston")
Roy$multivariateNormality

#Doornik-Hansen Test
Dh<-MVN::mvn(data=iris,subset="Species", mvnTest="dh")
Dh$multivariateNormality

我必须以一种易于在我的发现中呈现的方式获得结果。 我在三个 tables(每个物种一个)之后总结了上面输出的数据。 本质上,对于每个 table,行是不同的测试,列是测试统计值、P 值和 mvn 结果。我尝试了以下

   table <- rbind(Mar$multivariateNormality$setosa[1:2, ],Hz$multivariateNormality$setosa[1:2, ],Roy$multivariateNormality$setosa[1:2, ])
    htmlTable(table, caption="Testing")

但是,我得到了这个错误

Error in match.names(clabs, names(xi)) : 
names do not match previous names

“表格”实际上是数据框(每列都是一个因子变量)。为了使它们更容易处理,最好将所有结果放入一个列表中。然后我们可以将所有数据框转换为字符矩阵,确保列名匹配,然后将它们绑定在一起:

tablist <- lapply(list(Mar, Hz, Roy), `[[`, "multivariateNormality")
tablist <- lapply(tablist, function(x) 
  lapply(x, function(y) {
    y <- `colnames<-`(as.matrix(y), c("Test", "Statistic", "p value", "MVN"))
    y[,2] <- round(as.numeric(y[,2]), 2)
    y[,3] <- round(as.numeric(y[,3]), 2)
    y
  }))

setosa <- as.data.frame(do.call(rbind, lapply(tablist, `[[`, "setosa")))
versicolor <- as.data.frame(do.call(rbind, lapply(tablist, `[[`, "versicolor")))
virginica <- as.data.frame(do.call(rbind, lapply(tablist, `[[`, "virginica")))

htmlTable(setosa, caption = "Setosa")
htmlTable(versicolor, caption = "Versicolor")
htmlTable(virginica, caption = "Virginica")

给出: