我在R:normwhn.test::normality.test2
中使用(调整的)Doornik-Hansen测试来测试正常性。测试工作正常,但我想从测试中提取特定元素,即测试统计(Ep)和测试统计的显着性(Sig.Ep)。我有以下代码行定义矩阵/向量,然后测试正态性:
m_1 <- matrix(data[,2], nrow = nrow(data), ncol = 1)
normality.test2(m_1)
你们任何人都可以向我解释我是如何提取某个元素的吗?我试过用括号,例如normality.test2(m_1)[1]
但没有成功。
答案 0 :(得分:1)
如果查看normwhn.test::normality.test2
的源代码
(只是在没有括号的情况下评估它),你会看到所有的信息
想要只是打印到屏幕上,而不是返回值的一部分。例如,这些是最后几行:
...
dof <- 2 * nvars
sig.Ep <- 1 - pchisq(Ep, dof)
print("H0: data are normally distributed")
print("Ep")
print(Ep)
print("dof")
print(dof)
print("sig.Ep")
print(sig.Ep)
}
所以最好的两个选择是:
normality.test2
包裹在capture.output()
中以返回打印的所有内容(请参阅this question以供参考)。 选项2.可能会在前面花费较少的精力,但结果将作为字符向量返回(每行打印到控制台的一个元素),并且您必须解析它以获得您想要的内容。 / p>
战略2的一个例子:
data <- matrix(rnorm(100), ncol=2)
m_1 <- matrix(data[,2], nrow = nrow(data), ncol = 1)
test_result_output <- capture.output(normwhn.test::normality.test2(m_1))
然后您可以使用例如:
开始解析输出gsub("\"|\\[,*1,*\\]", "", test_result_output)
## ...
## ...
## [32] " Ep"
## [33] " "
## [34] " 1.512684"
## [35] " dof"
## [36] " 2"
## [37] " sig.Ep"
## [38] " "
## [39] " 0.4693803"
(fwiw,如果我是你,我会抓住函数的代码并重写它以便它返回你想要的东西。从长远来看要容易得多。甚至可以考虑向作者发送消息,并询问是否他们会考虑引入像output_in_return_value
这样的参数。)