2015-04-20 13 views
5

Perché RStudio, durante la compilazione di un file .HTML da .Rmd, tenta di leggere il file .RProfile? Voglio dire, premo il pulsante "Knit HTML", e quindi effettivamente tenta di eseguire tutto ciò che ho in .RProfile, carica ogni libreria menzionata lì e quindi non riesce a cercare di procurarmi file esterni (ho un mucchio di auto- funzioni di cui .RProfile, linee come source('/Users/me/.rstudio-desktop/lib/lib.stocks.R'), eccCompilare RMarkdown con RStudio: perché leggere .RProfile?

codificato per ora, ho letteralmente dovuto spostare .RProfile dalla home directory durante la compilazione (maglieria), ma ci probabilmente dovrebbe essere una sorta di opzione, o qualcosa del genere?

Sarei grato per qualsiasi suggerimento :).


OS X 10.8.5, RStudio versione 0.98.1091

+1

Non ho una buona risposta, ma un work-around potrebbe essere 'if (interactive()) {## fa le cose per la normale r session} else {fai altre cose per la sessione non interattiva, ie, knitr compiling} 'oh metti questo nel tuo .profile, dimentica quella parte – rawr

+0

Grazie, @rawr, che funziona :). Ma ancora interessante, perché lo fa in primo luogo ... –

+1

non so se un knitr doc è una nuova sessione o se crea solo un nuovo ambiente, ma in entrambi i casi r sta iniziando normalmente il che significa che leggerà il tuo profilo .rprofile e fai tutto ciò che è lì prima. Ho pensato che potresti essere in grado di passare '--vanilla' nell'opzione chunk' engine.opts', ma non sembra che sia così – rawr

risposta

3

Questo è ciò che fa .Rprofile per definizione. Quando R si avvia, legge ed esegue questo file. RStudio avvia una nuova sessione R per compilare i documenti R Markdown e la sessione R legge .Rprofile, a meno che non dica alla sessione R di non farlo (ad esempio tramite R --no-init-file o R --vanilla), ma attualmente non è possibile controllare realmente come RStudio avvia la sessione R. Penso che if (interactive()) menzionato da @rawr sia un'ottima idea, ed è ciò che uso regolarmente anche io (voglio che le mie sessioni R non interattive siano "pulite").