返回texreg()对象

返回texreg()对象,r,knitr,texreg,R,Knitr,Texreg,我有一系列的lme4模型,我想在R中运行不同子集的不同结果(每个模型在意向治疗(ITT)和每方案(PP)子集上运行,我有不同的结果),我使用texreg()打印LaTeX表格以比较结果,并在knitr文档中打印 因为我有很多细微不同的模型要运行,所以我认为明智的做法是将我的模型和texreg()调用扭曲到一个函数中,为此我编写了 pleasant.regression <- function(data = proportion,

我有一系列的
lme4
模型,我想在R中运行不同子集的不同结果(每个模型在意向治疗(ITT)和每方案(PP)子集上运行,我有不同的结果),我使用
texreg()
打印LaTeX表格以比较结果,并在
knitr
文档中打印

因为我有很多细微不同的模型要运行,所以我认为明智的做法是将我的模型和
texreg()
调用扭曲到一个函数中,为此我编写了

pleasant.regression <- function(data       = proportion,
                                time.frame = "September 2013",
                                outcome    = "unscheduled",
                                family     = binomial,
                                caption    = "ITT and PP Linear Mixed Effects Model Coefficients and Standard Errors for \\emph{any} Unscheduled Visits in September 2013.",
                                label    = "logistic-unscheduled",
                                ...){
    ## Require packages 
    require(lme4)
    require(ResourceSelection)
    require(texreg)
    ## Set defaults for texreg tables, can be modified with additional arguments

    texreg.digits        <- 2
    texreg.table         <- TRUE
    texreg.caption.above <- TRUE
    texreg.booktabs      <- TRUE
    texreg.dcolumn       <- TRUE
    texreg.use.packages  <- FALSE
    texreg.float.pos     <- "!htpb"
    texreg.ci.force      <- TRUE
    texreg.ci.test       <- 0
    ## Parse the outcome into a formula with the desired mixed
    ## effects model
    .formula <- reformulate(response = outcome, termlabels = c("allocation", "gender", "age", "n.unscheduled.2012", "(1 | pracid)"))
    ## Logistic Regresion
    if(family == "binomial"){
        ## ITT
        itt.mixed <- lmer(.formula,
                          data   = subset(data,
                                          period == time.frame & age.include == TRUE),
                          family = family)
        ## PP
        pp.mixed <- lmer(.formula,
                         data   = subset(data,
                                         period == time.frame & age.include == TRUE & pp == 1),
                         family = family)
    }
    ## Negative Binomial
    else if(family == "negbin"){
        ## ITT
        itt.mixed <- glmer.nb(.formula,
                              data   = subset(data,
                                              period == time.frame & age.include == TRUE))
        ## PP
        pp.mixed <- glmer.nb(.formula,
                             data   = subset(data,
                                             period == time.frame & age.include == TRUE & pp == 1))
    }
    ## Save table comparing ITT to PP using texreg()
    results <- invisible(texreg(list(itt.mixed, pp.mixed), 
                                custom.model.names = c("ITT", "PP"),
                                custom.coef.names  = c("Intercept", "Allocation (Letter)", "Gender (Female)", "Age", "$N_{Unscheduled}$ September 2012"),
                                digits             = texreg.digits,
                                caption            = caption,
                                table              = texreg.table,
                                caption.above      = texreg.caption.above,
                                label              = label,
                                booktabs           = texreg.booktabs,
                                dcolumn            = texreg.dcolumn,
                                use.packages       = texreg.use.packages,
                                float.pos          = texreg.float.pos,
                                ci.force           = texreg.ci.force,
                                ci.test            = texreg.ci.test))
    return(results)
}

无论出于何种原因,
texreg()
函数选择通过
cat()。这并不是R中大多数函数的工作方式,但是对于用户提交的包,包作者可以做任何他们喜欢的事情

因此,从技术上讲,默认情况下
texreg()
不返回任何内容。您可以通过设置
return.string=TRUE
让它返回一个字符串,但它仍然会打印到屏幕上。防止自动打印的最简单方法是使用
capture.output()
包装调用。这将抑制屏幕输出,并将结果转换为字符向量,每行输出都有一个条目。因此,您可以将函数的结尾更改为

results <- paste(capture.output(texreg(... rest of code ...)), collapse="\n")
return(results)

结果感谢MrFlick,这解决了我遇到的问题。这在交互式终端中有效,但当我在Knitr
.Rnw
文件中包含对函数的调用时,它不会产生任何输出。分配返回的对象(例如,
my.results可能
knitr
正在拦截输出。我不确定。我自己不使用
knitr
。好的,我会看看这个(尽管没有使用
knitr
,但感谢您的帮助),虽然如果我只是调用我的函数,而不分配结果,返回的字符值也不会显示。我希望它是
knitr
特定的,并且可能值得它自己的线程,因为您为我的原始问题提供了一个可行的解决方案。再次感谢。对不起,我确实意识到了最小复制的实用性我发现这个问题与knitr有关,是因为在函数中包含了对一个无法读取的文件的引用,而该文件现在已被排序。作为旁白,我向
texreg
的作者Philip Liefield询问了有关使用
cat()的问题
要返回对象,并且他已经更新了包,请参见
results <- paste(capture.output(texreg(... rest of code ...)), collapse="\n")
return(results)