如何打印MSM R包导致Rmarkdown MS Word输出?

时间:2016-11-30 14:01:39

标签: r ms-word knitr r-markdown markov

我在Rstudio中使用Rmarkdown和Kniter制作MS Word文档。但是,我的结果来自MSM包。这是我在.rmd sript中的代码:

knitr::kable(pmatrix.msm(xdata.msm),caption = "Transition probability matrix.")

我收到此错误:

Error in as.data.frame.default(x) : 
  cannot coerce class ""msm.est"" to a data.frame
Calls: <Anonymous> ... format_args -> as.data.frame -> as.data.frame.default

如何在Word中很好地打印MSM模型结果。请帮我解决。此

更新

转换为数据框提供:Error in as.data.frame.default(x[[i]], optional = TRUE) : cannot coerce class ""msm.est"" to a data.frame. 我需要为pmatrix.msm(xdata.msm)添加标题。

这是我的msm对象:

dput(xdata.msm)
structure(c(0.867104394602623, 0.0297597288741373, 0.0111688422294673, 
0.0436200880979502, 0.937379027520689, 0.0642139547902726, 0.0892755172994266, 
0.0328612436051735, 0.92461720298026), .Dim = c(3L, 3L), .Dimnames = list(
    c("State 1", "State 2", "State 3"), c("State 1", "State 2", 
    "State 3")), class = "msm.est")

更新: as.data.frame.matrix()适用于某些人但不适用于所有人。请看这个对象:

dput(pnext.msm(xdata.msm))
structure(list(estimates = structure(c(0, 0.493157008697057, 
0.141450173196988, 0.312417736561033, 0, 0.858549826803012, 0.687582263438967, 
0.506842991302943, 0), .Dim = c(3L, 3L), .Dimnames = list(c("State 1", 
"State 2", "State 3"), c("State 1", "State 2", "State 3"))), 
    L = structure(c(0, 0.404769718769504, 0.0851255671695353, 
    0.229501053449466, 0, 0.775032294188692, 0.599692174664181, 
    0.416275351504334, 0), .Dim = c(3L, 3L)), U = structure(c(0, 
    0.583724648495666, 0.224967705811308, 0.400307825335819, 
    0, 0.914874432830465, 0.770498946550534, 0.595230281230496, 
    0), .Dim = c(3L, 3L))), .Names = c("estimates", "L", "U"), class = "msm.est")

Warning in seq_len(ncols) : first element used of 'length.out' argument
Error in seq_len(ncols) : 
  argument must be coercible to non-negative integer

2 个答案:

答案 0 :(得分:1)

使用as.data.frame.matrix(xdata.msm)代替as.data.frame(xdata.msm)。也就是说,明确地为matrix调用as.data.frame方法。这是因为R不能说这个类的对象也是一个矩阵,并且包作者忽略了提供数据框强制方法。

答案 1 :(得分:0)

我认为您的错误消息非常清楚。 kable可以很好地处理矩阵或数据框。您的对象是其他东西并将其转换为数据框不起作用。您必须将msm结果转换为数据框,然后才能使用kable。否则,只需打印出pmatrix.msm(xdata.msm)的结果。