如何存储默认情况下在控制台上打印的输出

时间:2014-09-25 11:03:58

标签: r

我正在 mirt 包中处理名为residuals的此功能。

当您使用df.p = TRUE作为参数时,此函数默认打印输出。

我尝试了什么:

library(mirt)
data(LSAT7)
LSAT7=expand.table(LSAT7)
x <- mirt(LSAT7, 1, '3PL')
ss=residuals(x, df.p=TRUE)

我的输出为:

Degrees of freedom (lower triangle) and p-values:

       Item.1 Item.2 Item.3 Item.4 Item.5
Item.1     NA  0.474  0.346  0.097  0.162
Item.2      1     NA  0.269  0.547  0.192
Item.3      1  1.000     NA  0.871  0.873
Item.4      1  1.000  1.000     NA  0.991
Item.5      1  1.000  1.000  1.000     NA

我想存储此输出,但遗憾的是我无法做到这一点。

有没有人知道如何在不修改主要功能即residuals

的情况下存储此输出

P.S。 :在控制台上键入ss打印:

  Item.1 Item.2 Item.3 Item.4 Item.5
Item.1     NA -0.023 -0.030  0.052  0.044
Item.2 -0.512     NA  0.035 -0.019 -0.041
Item.3 -0.889  1.222     NA -0.005 -0.005
Item.4  2.755 -0.362 -0.026     NA  0.000
Item.5  1.952 -1.705 -0.026  0.000     NA

与自动打印的输出不同。

3 个答案:

答案 0 :(得分:0)

如果您查看getMethod("residuals", "ExploratoryClass"),您会看到如果df.pTRUE,则矩阵打印而不是返回。由于您不想修改代码,使用capture.output可以快速获得输出 - 但如果您愿意妥协/稍微使用代码,您可以编写一个小函数来提取表从mirt结果中没有太多麻烦。

使用residuals代码,您可以导出表格和打印结果(不是每个选项都包含在下面)

  extractFun <- function(mirtObject) 
                {
                     res = residuals(mirtObject)
                     J <- ncol(mirtObject@Data$data)
                     df <- (mirtObject@K - 1) %o% (mirtObject@K - 1)
                     diag(df) <- NA
                     colnames(df) <- rownames(df) <- colnames(res)

                     for (i in 1:J) {
                        for (j in 1:J) {
                            if (i < j) {
                               df[i, j] <- pchisq(abs(res[j, i]), 
                                             df = df[j, i], lower.tail = FALSE)
                            }
                         }
                      }
                      df
                  }


  x <- mirt(LSAT7, 1, '3PL')
  (e <- extractFun(x))

答案 1 :(得分:0)

如果您查看x的残差方法的来源,您可以看到如何计算和打印此矩阵。

自由度是:

df <- (object@K - 1) %o% (object@K - 1)

,元素是:

df[i, j] <- pchisq(abs(res[j, i]), df = df[j, 
                      i], lower.tail = FALSE)

所以我们效仿......

dfp <- function(object, res){
    df <- (object@K - 1) %o% (object@K - 1)
    diag(df)=NA
    df[upper.tri(df)] <- t(pchisq(abs(res), df = df, lower.tail = FALSE))[upper.tri(df)]

    df

}

看看我们得到了什么:

> dfp(x,ss)
     [,1]      [,2]      [,3]       [,4]      [,5]
[1,]   NA 0.4742744 0.3457484 0.09695082 0.1623715
[2,]    1        NA 0.2689685 0.54739758 0.1916354
[3,]    1 1.0000000        NA 0.87190032 0.8719003
[4,]    1 1.0000000 1.0000000         NA 1.0000000
[5,]    1 1.0000000 1.0000000 1.00000000        NA

由于residuals对返回值进行舍入,因此存在一些细微差别。哎哟。

> ss10=residuals(x, df.p=TRUE, digits=10)

打印:

Degrees of freedom (lower triangle) and p-values:

       Item.1    Item.2    Item.3     Item.4    Item.5
Item.1     NA 0.4744862 0.3456212 0.09694774 0.1623190
Item.2      1        NA 0.2690456 0.54726048 0.1916342
Item.3      1 1.0000000        NA 0.87124548 0.8725782
Item.4      1 1.0000000 1.0000000         NA 0.9906174
Item.5      1 1.0000000 1.0000000 1.00000000        NA

我的函数计算:

> dfp(x,ss10)
     [,1]      [,2]      [,3]       [,4]      [,5]
[1,]   NA 0.4744862 0.3456212 0.09694774 0.1623190
[2,]    1        NA 0.2690456 0.54726048 0.1916342
[3,]    1 1.0000000        NA 0.87124548 0.8725782
[4,]    1 1.0000000 1.0000000         NA 0.9906174
[5,]    1 1.0000000 1.0000000 1.00000000        NA

更好。

答案 2 :(得分:0)

如果我理解正确的问题,这是将输出作为data.frame返回的一种方式。

read.table(text=capture.output(ss))