2011-03-10 95 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