2011-03-10 400 views
1

我试图使用\Sexpr{}将我的R对象的值包含在LaTeX表中。我基本上试图在R中复制一个lm对象的汇总输出,因为xtable的内置方法xtable.lmxtable.summary.lm似乎没有包含Fstats,调整后的R平方等等(所有的东西都放在总结打印输出的底部R控制台中的lm对象)所以我尝试通过构建矩阵来复制xtable.summary.lm输出,然后构建相关信息的数据框以获得更多内容,以便我可以使用\Sexpr{}来引用值。我试图通过使用add.to.row附加\multicolumn{}命令来合并LaTeX表的最后一行的所有列,然后将所需的所有信息传递到表格的单元格中。在LaTeX表格环境中使用 Sexpr {}

问题是我得到"Undefined control sequence"\multicolumn{}表达式中的\Sexpr{}表达式。这两个不兼容?如果是这样,我做错了什么,如果没有人知道如何做我想做的事情?

感谢,

这里是我的代码的相关部分:

<<Test, results=tex>>= 

model1 <- lm(stndfnl ~ atndrte + frosh + soph) 

# Build matrix to replicate xtable.summary.lm output 

    x <- summary(model1) 
    colnames <- c("Estimate", "Std. Error", "t value", "Pr(<|t|)") 
    rownames <- c("(Intercept)", attr(x$terms, "term.labels")) 
    fpval <- pf(x$fstatistic[1],x$fstatistic[2], x$fstatistic[3], lower.tail=FALSE) 
    mat1 <- matrix(coef(x), nrow=length(rownames), ncol=length(colnames), dimnames=list(rownames,colnames)) 

# Make a data frame for extra information to be called by \Sexpr in last row of table 
    residse <- x$sigma 
    degf <- x$df[2] 
    multr2 <- x$r.squared 
    adjr2 <- x$adj.r.squared 
    fstat <- x$fstatistic[1] 
    fstatdf1 <- x$fstatistic[2] 
    fstatdf2 <- x$fstatistic[3] 

    extradat <- data.frame(v1 = round(residse,4), v2 =degf, v3=round(multr2,4), v4=round(adjr2,4),v5=round(fstat,3), v6=fstatdf1, v7=fstatdf2, v8=round(fpval,6)) 

    addtorow<- list() 
    addtorow$pos <-list() 
    addtorow$pos[[1]] <- dim(mat1)[1] 
    addtorow$command <-c('\\hline \\multicolumn{5}{l}{Residual standard error:\\Sexpr{extradat$v1}} \\\\ ') 

    print(xtable(mat1, caption="Summary Results for Regression in Equation \\eqref{model1} ", label="tab:model1"), add.to.row=addtorow, sanitize.text.function=NULL, caption.placement="top") 

回答

1

你不需要有Sexpr在R代码里面; R代码可以直接使用表达式。 Sexpr不是LaTeX的命令,尽管它看起来像一个;它是一个Sweave命令,所以它不能将它作为R代码的输出。

尝试

addtorow$command <-paste('\\hline \\multicolumn{5}{l}{Residual standard error:', 
         extradat$v1, '} \\\\ ') 

此外,没有必要完全重新创建xtable使用的矩阵,你可以建立在默认输出。建立在你有什么上面,是这样的:

mytab <- xtable(model1, caption="Summary Results", label="tab:model1") 
addtorow$pos[[1]] <- dim(mytab)[1] 
print(mytab, add.to.row=addtorow, sanitize.text.function=NULL, 
      caption.placement="top") 

为您也许能够使用的是一个例子见http://people.su.se/~lundh/reproduce/sweaveintro.pdf

+0

感谢您的帮助! – 2011-03-11 03:58:50