在R中的文本文件上写一个类“coeftest”的对象

时间:2013-11-23 15:02:11

标签: r extract

这是类coeftest

的对象
m = lm(data=mtcars, cyl ~ disp * wt * hp)
coef = coeftest(m, vcov=sandwich(m))

t test of coefficients:

               Estimate  Std. Error t value  Pr(>|t|)    
(Intercept)  8.0462e+00  1.4281e+00  5.6342 8.431e-06 ***
disp        -3.9661e-03  1.7331e-02 -0.2288  0.820929    
wt          -2.8621e+00  5.2758e-01 -5.4250 1.423e-05 ***
hp          -4.5629e-02  9.5038e-03 -4.8011 6.887e-05 ***
disp:wt      9.6036e-03  4.5263e-03  2.1218  0.044377 *  
disp:hp      1.1880e-04  7.8606e-05  1.5114  0.143742    
wt:hp        2.5839e-02  3.6615e-03  7.0569 2.697e-07 ***
disp:wt:hp  -7.2312e-05  2.0855e-05 -3.4674  0.001997 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

我想提取整个对象或仅提取其中的矩阵(带星星)。我尝试使用writewrite.tablewriteLinescat,但都没有效果。

我找到的唯一解决方案就是这个:

coef = coef[1:nrow(coef), 1:ncol(coef)]
cat(file=path, x=coef, append=T, quote=F)

但这样做会消除星星(重要代码)。

1 个答案:

答案 0 :(得分:3)

目前还不完全清楚你想要什么,但这里有两个选择。我们从这开始:

library(lmtest)
library(sandwich)
m <- lm(data=mtcars, cyl ~ disp * wt * hp)
coef <- coeftest(m, vcov=sandwich(m))

选项1:capture.output

这符合标题中要求的内容,并且非常直截了当。以下将创建一个名为“test.txt”的文件,其中包含coef的输出。

capture.output(coef, file="test.txt")

选项2:经过一些调整后的write.csv

星星实际上并不是数据的一部分,而是处理打印方法。 (有关详细信息,请参阅printCoefmat的代码)。但是,我们可以创建这些星星的矢量,并将cbind创建到输出中,然后将其写入CSV文件。

stars <- symnum(coef[, ncol(coef)], corr = FALSE, na = FALSE, 
                cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1), 
                symbols = c("***", "**", "*", ".", " "))

out <- cbind(as.data.frame.matrix(coef), Stars = format(stars))
write.csv(out, "test.csv")