返回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)