Przygotuj jeden raport PDF podzielony według zmiennych ze znakami specjalnymi (å æ ø) - problem z kodowaniem
Próbuję stworzyć jeden raport PDF podzielony na sekcje w oparciu o zmienną grupującą, używającbrew
iknitr
. Moja zmienna grupująca może zawierać znaki specjalne (umlauty), takie jak å æ ø.
Umlauty w tytule dokumentu są dobrze obsługiwane\usepackage[utf8]{inputenc}
(patrz przykłady poniżej). Jednak umlauty w zmiennej grupującej powodują błąd\usepackage[utf8]{inputenc}
.
Z drugiej strony, kiedy próbowałem\usepackage[T1]{fontenc}
, umlauty w zmiennej grupującej są obsługiwane poprawnie. Ale teraz tytuł nie jest poprawnie zakodowany.
Staram się uzyskać kodowanie zarówno w tytule, jak i zmiennej grupującej.
Oto przykład, w którym próbuję stworzyć jeden raport PDF z podsekcjami statystyk podsumowujących na gatunek w zbiorze danych tęczówki. Mam nadzieję, że może to zilustrować mój problem.
Kod R do przygotowania danych bez umlautówlibrary(plyr)
library(xtable)
library(knitr)
library(brew)
library(stringr)
Utwórz tabelę podsumowującą dla każdego gatunku na wbudowanymiris
zestaw danych. Najpierw użyj oryginałuSpecies
imiona, bez umlautów. Umlaut w dokumencie\title
tylko (zobacz kod dla.rnw
plik szablonu). Przechowuj tabele podsumowań na liście.
data(iris)
iris_tbl <- dlply(.data = iris, .variables = .(Species), function(x) xtable(summary(x)))
Zdefiniuj funkcjębrew_knit_pdf
. Funkcja tworzy plik lateksowy szablonuxxx.rnw
do nowego.rnw
plikxxx_out.rnw
, która ma jedną sekcję dla każdego elementu / grupy, która jest zapętlona. Thexxx_out.rnw
zbrew
jest następnie używany jako plik wejściowy wknit2pdf
i jest konwertowany do formatu PDF.
brew_knit_pdf <- function(template, ...){
brew_out <- str_replace(string = template, pattern = ".rnw", replacement = "_out.rnw")
brew(file = template, output = brew_out)
knit2pdf(input = brew_out, ...)
}
brew_knit_pdf("iris_umlaut_tbl.rnw")
Kod pliku szablonu .rnwW moim przykładzie nazwa pliku szablonu została podana dla następującego koduiris_umlaut_tbl.rnw
. Ten plik jest używany jako wejście wbrew_knit_pdf
funkcja w skrypcie R.
\documentclass{article}
% \usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{geometry}
\geometry{tmargin=2.5cm,bmargin=2.5cm,lmargin=2.5cm,rmargin=2.5cm}
\begin{document}
\begin{titlepage}
\title{Using brew and knitr to produce one PDF report split by a grouping variable.\\Problem with å æ ø in grouping variable}
\clearpage\maketitle
\thispagestyle{empty}
\tableofcontents
\end{titlepage}
\newpage
\section{Summary statistics for each species}
% R code loop wrapped in brew syntax, which brews the template file xxx.rnw to a new .rnw file xxx_out.rnw, which has one section for each group that is looped over, i.e. the names of the list iris_tbl produced in the R script.
<% for (Sp in names(iris_tbl)) { -%>
\subsection{<%= Sp %>}
<<sum-<%= Sp %>, echo=FALSE, results='asis'>>=
print(iris_tbl[["<%= Sp %>"]])
@
\newpage
<% } %>
\end{document}
Kod R do przygotowania danych z umlautamiAby naśladować moje prawdziwe dane, zastępuję nazwy gatunków w danych tęczówki nazwami (nie sensycznymi) niż zawiera umlauty.
data(iris)
iris$Species <- as.character(iris$Species)
iris$Species[iris$Species == "setosa"] <- "åsetosa"
iris$Species[iris$Species == "versicolor"] <- "æversicolor"
iris$Species[iris$Species == "virginica"] <- "øvirginica"
# create a summary table for each species
iris_tbl <- dlply(.data = iris, .variables = .(Species), function(x) xtable(summary(x)))
Po przygotowaniu „wersji umlaut” iris_tbl uruchamiam funkcję brew_knit_pdf na tym samym pliku .rnw, jak powyżej, z tym wyjątkiem, że używam różnych pakietów kodowania (inputenc i / lub fontenc).
WynikOto podsumowanie czterech prób do tej pory; korzystanie z zestawów danych bez lub z umlautami i używanie różnych pakietów kodowania w pliku .rnw.
Dane R: iris_tbl przygotowane z gatunkami innymi niż umlautPlik .rnw: umlauty w\title{ }
, \usepackage[utf8]{inputenc}
Wydajność umlauty w tytule OK
Dane R: iris_tbl przygotowane z umlaut wersji gatunkówPlik .rnw: umlauty w\title{ }
, \usepackage[utf8]{inputenc}
Wydajność
Błąd: uruchomienie 'texi2dvi' w nieudanym błędzie 'iris_umlaut_tbl_out.tex' LaTeX: ... Inputenc pakietu Błąd: znak Unicode 8: æve nie skonfigurowany do użycia z LaTeX.
Dane R: iris_tbl przygotowane z umlaut wersji gatunkówPlik .rnw:umlauts in \title{ }
, \usepackage[T1]{fontenc}
, \usepackage[utf8]{inputenc}
Wydajność
Błąd: uruchomienie 'texi2dvi' w nieudanym błędzie 'iris_umlaut_tbl_out.tex' LaTeX: ... Inputenc pakietu Błąd: znak Unicode 8: æve nie skonfigurowany do użycia z LaTeX.
Dane R: iris_tbl przygotowane z umlaut wersji gatunkówPlik .rnw: umlauty w\title{ }
, \usepackage[T1]{fontenc}
Wydajność
umlauty w tytule nie są w porządku, umlauty w zmiennej grupującej OK
Czy ktoś może wskazać mi właściwy kierunek, aby uzyskać kodowanieobie tytułi zmienna grupująca? Z góry dziękuję za poświęcenie czasu.
Informacje o sesjiDomyślne kodowanie tekstu w moim R Studio 0.97.336: UTF-8
> sessionInfo()
R version 3.0.0 (2013-04-03)
Platform: x86_64-w64-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=Norwegian (Bokmål)_Norway.1252 LC_CTYPE=Norwegian (Bokmål)_Norway.1252
[3] LC_MONETARY=Norwegian (Bokmål)_Norway.1252 LC_NUMERIC=C
[5] LC_TIME=Norwegian (Bokmål)_Norway.1252
attached base packages:
[1] splines stats graphics grDevices utils datasets methods base
other attached packages:
[1] Hmisc_3.10-1 survival_2.37-4 pastecs_1.3-13 boot_1.3-9
[5] pspline_1.0-15 ggplot2_0.9.3.1 lubridate_1.2.0 stringr_0.6.2
[9] brew_1.0-6 knitr_1.1 xtable_1.7-1 plyr_1.8
[13] PerformanceAnalytics_1.1.0 xts_0.9-3 zoo_1.7-9 gdata_2.12.0.2
loaded via a namespace (and not attached):
[1] cluster_1.14.4 colorspace_1.2-2 dichromat_2.0-0 digest_0.6.3 evaluate_0.4.3 formatR_0.7
[7] grid_3.0.0 gtable_0.1.2 gtools_2.7.1 labeling_0.1 lattice_0.20-15 MASS_7.3-26
[13] memoise_0.1 munsell_0.4 proto_0.3-10 RColorBrewer_1.0-5 reshape2_1.2.2 scales_0.2.3
[19] tools_3.0.0
> getOption("encoding")
[1] "native.enc"
Aktualizacja:Jestem bardzo wdzięczny za wkład „off-SO” ze strony opiekuna pakietu browarniczego Jeffreya Hornera. Nie miał problemów z kodowaniem przy uruchamianiu mojego skryptu z Ubuntu i wiersza poleceń R. To dało mi nową nadzieję. Nie mam możliwości samodzielnego uruchomienia Ubuntu, ale dzisiaj zaktualizowałem RStudio (0.97.449) i ustawiłem domyślne kodowanie na ISO8859-1 (dzięki Yihui!). Teraz znaki specjalne są zakodowane poprawnie zarówno w tytule, jak iw zmiennej grupującej za pomocą\usepackage[latin1]{inputenc}
w pliku .rnw. Również\usepackage[ansinew]{inputenc}
Prace. Nie jestem pewien, co poszło źle w mojej pierwotnej próbie. Prawdopodobnie RStudio nie zastosowało domyślnego kodowania ustawionego w Opcjach, które zmieniłem po radach Yihui, na pliki skryptów po ich ponownym otwarciu. Ale to tylko spekulacja.