2013-04-10 8 views
7

Sto usando knitr 1.1. in R 3.0.0 e in WinEdt (RWinEdt 2.0). Ho problemi con knitr nel riconoscere i caratteri svedesi (ä, ö, å). Questo non è un problema con R; quei personaggi sono persino riconosciuti nei nomi di file, nomi di directory, oggetti, ecc. Anche in Sweave non era un problema.Caratteri speciali non inglesi in knitr

Ho già \usepackage[utf8]{inputenc} nel mio documento, ma knitr non sembra in grado di gestire i caratteri speciali. Dopo aver eseguito knitr, ricevo il seguente messaggio:

Warning in remind_sweave(if (in.file) input) : 
It seems you are using the Sweave-specific syntax; you may need Sweave2knitr("deskriptiv 130409.Rnw") to convert it to knitr 

processing file: deskriptiv 130409.Rnw 

(*) NOTE: I saw chunk options "label=läser_in_data" 
please go to http://yihui.name/knitr/options (it is likely that you forgot to 
quote "character" options) 

Error in parse(text = str_c("alist(", quote_label(params), ")"), srcfile = NULL) : 
1:15: unexpected input 
1: alist(label=lä 
       ^
Calls: knit ... parse_params -> withCallingHandlers -> eval -> parse 
Execution halted 

L'etichetta particolare di cui si lamenta è label = läser. Cambiare l'etichetta non è sufficiente, poiché knitr si lamenta anche se gli oggetti R usano ååö.

Ho usato Sweave2knitr() dal momento che il file originariamente è stato creato per Sweave, ma il risultato non era migliore: ora tutti gli ååö sono stati trasformati in Ãpà ¥ ö, sia nei pezzi R che nel testo in lattice, e knitr fornisce ancora un messaggio di errore.

informazioni Sessione:

R version 3.0.0 (2013-04-03) 
Platform: i386-w64-mingw32/i386 (32-bit) 

locale: 
[1] LC_COLLATE=Swedish_Sweden.1252 LC_CTYPE=Swedish_Sweden.1252   LC_MONETARY=Swedish_Sweden.1252 
[4] LC_NUMERIC=C     LC_TIME=Swedish_Sweden.1252  
attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  
other attached packages: 
[1] knitr_1.1 
loaded via a namespace (and not attached): 
[1] digest_0.6.3 evaluate_0.4.3 formatR_0.7 stringr_0.6.2 tools_3.0.0 

Come ho già detto ci sono i nomi di file e oggetti con caratteri svedesi (dal momento che non è stato un problema prima), e anche il testo deve essere in svedese.

Grazie per qualsiasi aiuto nel far funzionare knitr al di fuori dell'inglese.

risposta

3

Penso che si debba contattare il manutentore dello R-Sweave mode in WinEdt se si utilizza questa modalità per chiamare knitr. Il problema è che WinEdt deve passare la codifica del file a knit() se non si utilizza la codifica nativa del proprio sistema operativo. Hai menzionato UTF-8 ma non è la codifica nativa per Windows, quindi non devi usare \usepackage[utf8]{inputenc} a meno che non sei sicuro che il tuo file sia codificato in UTF8.

Qui sono confusi diversi problemi, ed è improbabile che li risolva tutti con una sola risposta.

Il primo problema è label=läser, che in realtà dovrebbe essere label='läser', vale a dire si must quote tutte le etichette Chunk (check altre etichette nel documento pure); knitr tenta di quotare automaticamente le etichette quando si scrive <<foo>>= (è impostato su <<'foo'>>=), ma questo non funziona quando si utilizza <<label=foo>>= (è necessario scrivere <<label='foo'>>= esplicitamente). Ma questo problema forse non è essenziale qui.

Penso che il vero problema qui sia la codifica dei file (che è cattiva sotto Windows). Sembra che tu stia utilizzando UTF-8 in un sistema che non rispetta lo UTF-8 per impostazione predefinita. In questo caso è necessario chiamare lo knit('yourfile.Rnw', encoding = 'UTF-8'), ad esempio passare la codifica su knit(). Non uso WinEdt, quindi non ho idea di come farlo. Puoi hard-code the encoding in the configurations, ma non è raccomandato.

due suggerimenti:

  1. non utilizzare UTF-8 sotto Windows; utilizzare la codifica nativa del sistema (Windows-1252, credo);
  2. o utilizzare RStudio anziché WinEdt, che può passare la codifica a knitr;

BTW, dal momento che Sweave2knitr() è stato estratto, ci devono essere altri problemi nel documento Rnw. Per diagnosticare il problema, ci sono due modi per andare:

  1. se si utilizza UTF-8, gestito Sweave2knitr('deskriptiv 130409.Rnw', encoding = 'UTF-8')
  2. se si utilizza la codifica nativa del vostro sistema operativo, basta eseguire Sweave2knitr('deskriptiv 130409.Rnw')

Si prega di leggere il documentation in caso di domande sulle informazioni diagnostiche stampate da Sweave2knitr().

+0

Grazie. Almeno ora sono in grado di eseguire knitr() sul mio file ma i caratteri speciali sono ancora un problema. Ho corretto le parti di Sweave per conformarsi a knitr(). Il testo in lattice viene eseguito correttamente specificando (in questo ordine):
'\ usepackage [utf8] {inputenc}' '\ usepackage [T1] {fontenc}'. – user2266041

+1

@ user2266041 Se si è certi che si sta utilizzando UTF-8, la risposta di Gilbert dovrebbe funzionare. –

2

R-Sweave invoca knitr attraverso la macro knitr.edt, che a sua volta utilizza il codice in knitrSweave.R per avviare la maglia. Il comando knit in questo script successivo si trova nella parte superiore e legge res <- knit(filename).

Seguendo il suggerimento di Yihui, si può provare a sostituire questo comando con

res <- knit(filename, encoding = 'UTF-8') 

Il knitr.edt e knitrSweave.R file dovrebbe essere nella cartella %b\Contrib\R-Sweave, dove %b è la vostra cartella utente WinEdt (qualcosa come "C:\Users\userA\AppData\Roaming\WinEdt Team\WinEdt 7" sotto Win 7) .

Attualmente, non so come possiamo passare la codifica come argomento per evitare questa soluzione di codifica rigida.

Suggerisco di evitare caratteri estesi nei nomi di file che possono essere solo fonti di problemi. Personalmente, non uso mai tali nomi.

+0

Gilbert: Grazie per la tua risposta. Ho aggiunto il testo che hai menzionato, ma ho ancora problemi con knitr ad accettare caratteri speciali nei blocchi R. Nomi di file e oggetti R contenenti ååö semplicemente non vengono letti. – user2266041