Оцените синтаксис LaTeX в цикле внутри блока Knitr и отрегулируйте разрешение графика.

Извините, если этот вопрос очень глупый. Я пытаюсь запустить регрессию и отправить сводные таблицы и диагностические графики в файл PDF. Я нашел этот пакет очень полезным, но у меня есть два основных вопроса.

  1. Могу ли я использовать LaTeX для форматирования страницы внутри фрагмента?
  2. Есть ли способ уменьшить размер графиков (мне нужно уменьшить размер файла PDF)? Я попытался установить dpi и использовать png, а не график, но это не сработало.

Спасибо за любые предложения.

Вот мой код:

\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}

Обновлять

Обнаружена проблема с форматом, когда вы использовали цикл внутри фрагмента. Основываясь на предложениях Yihui, я побежал

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 и попытался загрузить пакет Knitr прямо из Git и собрать его в оболочке Windows. У меня были следующие ошибки:

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

person TTT    schedule 28.11.2012    source источник


Ответы (1)


Вы могли бы сильно упростить свой пример. Ответы на два вопроса (подробную документацию см. на http://yihui.name/knitr/options):

  1. да, используйте results='asis';
  2. если вы хотите использовать устройство png, вы можете установить меньшее dpi для чанка; Устройство R pdf() уже сжимает графики, и png, вероятно, является единственным выбором, если сжатие PDF по умолчанию вас не устраивает; по умолчанию 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}
person Yihui Xie    schedule 28.11.2012
comment
Спасибо за вашу помощь. Однако я немного сбит с толку, когда поместил кусок в цикл. Первый разрыв страницы размещен неправильно. У вас есть идеи по этому поводу? Спасибо! Вот код '\documentclass{article} \begin{document} ‹‹message=FALSE, tidy=TRUE, fig.align=center, echo=FALSE, warning=FALSE, results='asis'››= для (i в 1:3){ кошка (i) x = rnorm(1000) plot(x) cat('\\newpage') } @ \end{document}' - person TTT; 28.11.2012
comment
@tao.hong Это ошибка, о которой сообщалось несколько раз (например, github.com/ hadley/evaluate/issues/14) Исправлено, и вам нужно library(devtools); install_github('evaluate', 'hadley'); install_github('knitr', 'yihui') - person Yihui Xie; 29.11.2012
comment
Кажется, я ближе к цели. Тем не менее, у меня есть некоторые проблемы с установкой Knitr из github. Пожалуйста, проверьте мои обновления для деталей. Спасибо! - person TTT; 29.11.2012
comment
Я установил Rtools216.exe по вашей ссылке, но все равно столкнулся с той же ошибкой... - person TTT; 29.11.2012
comment
@tao.hong Вы набрали R CMD build knitr --no-vignettes, но существует ли вообще каталог knitr под C:\Users\th\Documents\R\win-library\2.15?? Почему вы загрузили исходный пакет на C:\Users\th\Documents\R\win-library\2.15? Я имею в виду, что это очень необычно, поскольку обычно это место назначения пакетов R после установки; вы могли бы скачать в `C:\Users\th\Documents` и установить его оттуда. - person Yihui Xie; 30.11.2012
comment
Это работает сейчас! Вы правы, мне нужно скомпилировать пакет вне библиотеки R и выполнить локальную установку. Большое спасибо за помощь! - person TTT; 30.11.2012
comment
еще кое-что. Можно ли включить как cat('\\newpage'), так и print(имя переменной) в один и тот же фрагмент? Или вы пытались включить два фрагмента в цикл? Спасибо - person TTT; 03.12.2012
comment
@tao.hong Пожалуйста, задавайте разные вопросы в разных постах, вместо того, чтобы вечно зацикливаться на этом. - person Yihui Xie; 03.12.2012