【问题标题】:Evaluate LaTeX syntax in a loop inside knitr chunk & adjust plot dpi在 knitr 块内的循环中评估 LaTeX 语法并调整绘图 dpi
【发布时间】:2012-11-28 07:15:15
【问题描述】:

对不起,如果这个问题很愚蠢。我正在尝试运行回归并将汇总表和诊断图发送到 PDF 文件。我发现这个包非常有用,但有两个基本问题。

  1. 我可以使用 LaTeX 在 Chunk 中格式化页面吗?
  2. 有没有办法减小绘图的大小(我需要减小 pdf 文件的大小)?我尝试设置 dpi 并使用 png 而不是 plot,但没有成功。

感谢您的任何建议。

这是我的代码:

\documentclass[10pt]{article}
\usepackage{graphicx}
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{setspace}
\usepackage[margin = 1in]{geometry}

\begin{document}
\SweaveOpts{concordance=TRUE}
\section{Risk $\sim$ log(Parameters)}
<<fig.width=5,  fig.height=4.5, message=FALSE, tidy=TRUE, fig.align="center", echo=FALSE, warning=FALSE, eval=TRUE>>=
library(R.matlab)
for (k in 1:6){
data_t=readMat("I:\\Dropbox\\Rregression\\matlab_size.mat")

data=data.frame(NA, nrow = length(data_t[[1]]), ncol = 7)
data=data.frame(rho=data_t[[1]],Risk=data_t[[2]],Mass.f=data_t[[3]],Mass.utf=data_t[[4]],Mass.w=data_t[[5]],
                ach=data_t[[6]],p=data_t[[7]])

data2=log(subset(data,select=-c(Risk)))
N_reg=dim(data2)[2]
num_ele=k
Comb=combn(N_reg,num_ele)
N_comb=ncol(Comb)
Results=data.frame(NA,ncol=4,nrow=N_comb)
TSS=sum((data$Risk-mean(data$Risk))^2)

for (i in 1:N_comb){  
  data_temp=data2[,Comb[,i]]  
  lm_temp=lm(data$Risk~as.matrix(data_temp))
  name=paste("lm_", i, sep="")
  assign(name, lm_temp)
  Results[i,1]=summary(lm_temp)$r.squared
  Results[i,2]=summary(lm_temp)$adj.r.squared
  Results[i,3]=sum(resid(lm_temp)^2)
  Results[i,4]=sum((fitted(lm_temp)-mean(fitted(lm_temp)))^2)
} 
colnames(Results)=c("R2", "Adj_R2", "RSS", "ESS")
best_col=which(Results[,2]==max(Results[,2]))

cat ('Number of independent variables=', k)
print (summary(eval(parse(text=(paste("lm_", best_col, sep=""))))))
print (Results[best_col,])
par(mfrow=c(2,2),mar=c(3,3,3,3))
plot(eval(parse(text=(paste("lm_", best_col, sep=""))))) #question 2: is there a way to reduce dpi of plot? 
\newpage #Here is question 1, I want to add a page break after printing a pair of summary table and plots
}

@
\end{document}

更新

当您在块中涉及循环时发现格式问题。根据一辉的建议,我跑了

library(devtools)
install_github('evaluate', 'hadley')
install_github('knitr', 'yihui')

在 R 控制台中。但是,遇到了以下与小插图相关的错误:

* installing the package to re-build vignettes
* creating vignettes ... ERROR
C:/PROGRA~1/R/R-215~1.1/bin/Rscript -e "library(knitr); knit2pdf('knitr-intro.Rnw')"
/usr/bin/sh: -c: line 0: syntax error near unexpected token `('
/usr/bin/sh: -c: line 0: `C:/PROGRA~1/R/R-215~1.1/bin/Rscript -e \library(knitr); knit2pdf(knitr-intro.Rnw)\'
make: *** [knitr-intro.pdf] Error 1
Error in tools::buildVignettes(dir = ".") : running 'make' failed
Execution halted
Error: Command failed (1)
In addition: Warning message:
running command '"C:/PROGRA~1/R/R-215~1.1/bin/x64/R" --vanilla CMD build "C:\Users\th\AppData\Local\Temp\RtmpSMRGAq\yihui-knitr-568a092" --no-manual --no-resave-data' had status 1 

那么,关于如何解决这个问题的任何建议?我已经安装了 MikTex 2.9,并尝试直接从 Git 下载 Knitr 包并在 Windows shell 中构建。我有以下错误:

C:\Users\th\Documents\R\win-library\2.15>R CMD build knitr --no-vignettes
* checking for file 'knitr/DESCRIPTION' ... OK
* preparing 'knitr':
* checking DESCRIPTION meta-information ... OK
Warning in file(con, "r") :
  cannot open file 'man': No such file or directory
Error in file(con, "r") : cannot open the connection
 ERROR
computing Rd index failed

【问题讨论】:

    标签: r latex knitr


    【解决方案1】:

    您可以大大简化您的示例。两个问题的答案(详细文档请参阅http://yihui.name/knitr/options):

    1. 是的,使用results='asis'
    2. 如果你想使用png设备,你可以为chunk设置更小的dpi; R 的pdf() 设备已经压缩了绘图,如果默认的 PDF 压缩对您不满意,png 可能是唯一的选择;默认的dpi 是 72,我认为较小的值不会有太大帮助

    这是一个最小的例子:

    \documentclass{article}
    
    \begin{document}
    
    hi
    
    <<output-tex, results='asis'>>=
    x = rnorm(1000)
    cat('\\newpage')
    @
    
    here is a plot
    
    <<smaller-png, dev='png', dpi=30>>=
    plot(x)
    @
    
    \end{document}
    

    【讨论】:

    • 感谢您的帮助。但是,一旦将块放入循环中,我就会有点困惑。第一个分页符放置不正确。你有什么想法吗?谢谢!这是代码 '\documentclass{article} \begin{document} >= for (i in 1:3){ cat (i) x = rnorm(1000) plot(x) cat('\\newpage') } @ \end{document}'
    • @tao.hong 这个bug已经报过几次了(比如github.com/hadley/evaluate/issues/14)已经修复,需要library(devtools); install_github('evaluate', 'hadley'); install_github('knitr', 'yihui')
    • 看来我离目的地更近了。但是,我在从 github 安装 knitr 时遇到了一些问题。请查看我的更新以获取详细信息。谢谢!
    • 我从你的链接安装了Rtools216.exe,但还是遇到了同样的错误...
    • @tao.hong 你输入了R CMD build knitr --no-vignettes,但是C:\Users\th\Documents\R\win-library\2.15下到底有没有目录knitr??为什么把源码包下载到C:\Users\th\Documents\R\win-library\2.15?我的意思是这很不寻常,因为这通常是安装后 R 包的目的地;您可以下载到 `C:\Users\th\Documents` 并从那里安装。
    猜你喜欢
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 2015-04-19
    相关资源
    最近更新 更多