2015-10-20 9 views
7

mi rivolgo due domande che ho chiesto in precedenza:Mettere direttamente nel documento Knitr (senza salvare file in cartella) Parte 3

sto scrivendo un Pacchetto R che genera un file .pdf per gli utenti che emette riepiloghi di dati. Ho uno script .Rnw nel pacchetto (qui, il mio MWE è chiamato test.Rnw). L'utente può fare:

knit2pdf("test.Rnw", clean=T) 

Questo rende il processo facile per loro, perché crea automaticamente il file .pdf dal file .tex, e cancella i file non necessari per loro (.aux e .log, per esempio). Inoltre memorizza qualsiasi immagine in una directory temporanea (usando tempdir()), che verrà quindi cancellata di routine dal sistema dopo che sono stati incorporati nel file .tex e .pdf. Ciò significa che non è necessario cancellare i file di immagine.

Qui di seguito è il mio MWE test.Rnw:

\documentclass[nohyper]{tufte-handout} 
\usepackage{tabularx} 
\usepackage{longtable} 

\setcaptionfont{% changes caption font characteristics 
    \normalfont\footnotesize 
    \color{black}% <-- set color here 
} 

\begin{document} 

<<setup, echo=FALSE>>= 
    library(knitr) 
library(xtable) 
library(ggplot2) 
# Specify directory for figure output in a temporary directory 
temppath <- tempdir() 
opts_chunk$set(fig.path = temppath) 
@ 

    <<diamondData, echo=FALSE, fig.env = "marginfigure", out.width="0.95\\linewidth", fig.cap = "The diamond dataset has varibles depth and price.",fig.lp="mar:">>= 
    print(qplot(depth,price,data=diamonds)) 
@ 

    <<echo=FALSE,results='asis'>>= 
    myDF <- data.frame(a = rnorm(1:10), b = letters[1:10]) 
print(xtable(myDF, caption= 'This data frame shows ten random variables from the distribution and a corresponding letter', label='tab:dataFrame'), floating = FALSE, tabular.environment = "longtable", include.rownames=FALSE) 
@ 

    Figure \ref{mar:diamondData} shows the diamonds data set, with the 
variables price and depth.Table \ref{tab:dataFrame} shows letters a through j 
corresponding to a random variable from a normal distribution. 

\end{document} 

Vorrei sottolineare che, in realtà, non v'è un altro file .Rnw nel mio pacchetto che chiama il file test.Rnw via:

knit2pdf("/inst/Rnw/test.Rnw","/path/test.tex",clean=T) 

In ogni caso, io sto cercando di ottenere il pacchetto pronto per essere sottoposto a CRAN e hanno eseguito su due problemi:

1) La domanda più imbarazzante prima: il codice MWE sopra sembra funzionare su Mac Sys tems, ma non sembra funzionare su sistemi Windows! Su Windows, il file .pdf che viene generato non contiene le immagini. Dopo aver risolto il problema, penso di aver capito il problema, ma non riesco ancora a trovare una soluzione.

Fondamentalmente, su Windows, sembra che il comando tempdir() crei un percorso con doppie barre rovesciate, come \\ questo \\ è \\ myPath. Quindi, nel file .tex, il percorso della directory temporanea (che contiene le immagini) è costituito da singole barre rovesciate, come \ this \ is \ myPath. Tuttavia, queste dovrebbero essere singole barre di avanzamento, come/this/is/myPath per il file .tex per trovare le immagini memorizzate nella directory temporanea.

In effetti, se io manualmente modificare le barre inverse per inoltrare le barre nel file .tex in Windows, quindi posso convertirlo correttamente in file .pdf che contiene con successo le immagini.

Non sono sicuro di come risolvere questo nella mia sintassi, tuttavia. Ho pensato che questo sarebbe una soluzione facile, ma se ho semplicemente fare qualcosa di simile:

# Specify directory for figure output in a temporary directory 
temppath <- tempdir() 
gsub("\\\\", "/", temppath) 

Poi le immagini non possono essere memorizzati nella directory temporanea di Windows, in primo luogo, anche se il file .tex conterrà le corrette barre singole in avanti necessarie. (Credo) la stessa variabile sia usata per denotare la posizione della directory temporanea, così come la posizione dell'immagine nel file .tex, e in qualche modo devono avere direzioni della barra diverse.

Sono un po 'sorpreso che questo non sia venuto fuori prima (almeno nella mia ricerca). Forse le persone non hanno la cancellazione automatica delle immagini durante l'esecuzione di knitr?

2) Mi chiedo se sarebbe accettabile per me, nell'altro.file di RNW, aggiungere una seconda linea per chiamare:

knit2pdf("/inst/Rnw/test.Rnw","/path/test.tex",clean=T) 
system(sprintf("%s", paste0("rm -r ", "/path/myFile.tex"))) 

modo che il file .tex può anche essere cancellati automaticamente. Sto cercando di confermare che tale sintassi sarebbe accettabile per gli standard CRAN, poiché comporta la cancellazione di un file dal computer dell'utente (che potrebbe sembrare pericoloso/malware), sebbene punti in modo specifico nel file .tex appena generato, e quindi non dovrebbe cancellare nulla di importante per loro.

* Nota: per impostazione predefinita, ho cancellato tutti i file intermedi in modo che l'utente si occupi solo del file .pdf. Tuttavia, sto ancora permettendo agli utenti l'opzione di andare contro questo default, e mantenere questi file intermedi, se necessario.

+2

fa 'normalizePath (tempdir(), winslash = '/')' aiuto? qualsiasi cosa memorizzata in un 'tempdir' verrà cancellata dopo che la sessione r è terminata, quindi non è necessario cancellare nulla esplicitamente. ma puoi '' scollegare' i file 'on.exit' di una funzione, che probabilmente preferirebbe eseguire i comandi di sistema – rawr

+1

Voglio solo dire che questa versione della domanda è molto migliorata dalla parte 2 in termini di qualità delle domande e chiarezza ! – Gregor

risposta

1

Il codice che si presenta mi dà un avvertimento riguardo all'espressione specifica di Sweave: \SweaveOpts{concordance=TRUE} Se rimuovo questo, la pagina si compila per me (con numerosi errori di casella) e produce un PDF con la grafica in Windows (e Ubuntu).

Non sono nemmeno chiaro perché si desidera specificare la propria directory temporanea in primo luogo: non si occupa di questo knitr?

Ho appena installato MikTex e l'ho aggiornato (numerosi pacchetti avevano 4 o 5 anni, subito dopo l'installazione).

ho provato con R-devel e R-3.2.2:

> sessionInfo() 
R version 3.2.2 (2015-08-14) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows 7 x64 (build 7601) Service Pack 1 

locale: 
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252 
[4] LC_NUMERIC=C       LC_TIME=English_United States.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] ggplot2_1.0.1 xtable_1.7-4 knitr_1.11 

loaded via a namespace (and not attached): 
[1] Rcpp_0.12.0  digest_0.6.8  MASS_7.3-44  grid_3.2.2  plyr_1.8.3  gtable_0.1.2  formatR_1.2  
[8] magrittr_1.5  evaluate_0.7.2 scales_0.3.0  stringi_0.5-5 reshape2_1.4.1 labeling_0.3  proto_0.3-10  
[15] tools_3.2.2  stringr_1.0.0 munsell_0.4.2 colorspace_1.2-6 

sessionInfo() 
R Under development (unstable) (2015-09-27 r69432) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows 7 x64 (build 7601) Service Pack 1 

locale: 
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252 
[4] LC_NUMERIC=C       LC_TIME=English_United States.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] ggplot2_1.0.1 xtable_1.7-4 knitr_1.11 

loaded via a namespace (and not attached): 
[1] Rcpp_0.12.0  digest_0.6.8  MASS_7.3-44  grid_3.3.0  plyr_1.8.3  gtable_0.1.2  formatR_1.2  
[8] magrittr_1.5  evaluate_0.7.2 scales_0.3.0  stringi_0.5-5 reshape2_1.4.1 labeling_0.3  proto_0.3-10  
[15] tools_3.3.0  stringr_1.0.0 munsell_0.4.2 colorspace_1.2-6