Как я могу отформатировать исходный код R с помощью SQL-запросов в Sweave, не удаляя разрывы строк? - PullRequest
4 голосов
/ 02 ноября 2010

Я использую R, MySQL, Sweave и LaTeX для генерации отчетов, которые запрашивают базу данных.Моя проблема заключается в том, что, поскольку код R встроен в файл .Rnw, где у меня, похоже, нет контроля над многострочным форматированием.

Я вставил следующий код R:

library(RMySQL)

con <- dbConnect(MySQL(), 
user='test_user', 
dbname='sakila', 
host='localhost', 
password='password')

data <- dbReadTable(con, 'film_list')

query <-('
SELECT category, count(FID) AS Number 
FROM film_list 
GROUP by category')

Cat <- dbGetQuery(con, query)

Cat

Затем я получаю следующий вывод в PDF, сгенерированном Sweave:

> library(RMySQL)
> con <- dbConnect(MySQL(), user = "test_user", dbname = "sakila",
+ host = "localhost", password = "password")
> data <- dbReadTable(con, "film_list")
> query <- ("\nSELECT category, count(FID) AS Number \nFROM film_list \nGROUP by category")
> Cat <- dbGetQuery(con, query)
> Cat

В результате запрос SELECT запускается со страницы.

Есть ли способ обеспечить вывод вывода LaTeXSQL-запрос, как он был написан?

Ответы [ 2 ]

9 голосов
/ 02 ноября 2010

Добавьте параметр keep.source к параметрам блока кода и установите для него true

<<foo,keep.source=TRUE>>=
query <- '
SELECT category, count(FID) AS Number
FROM film_list
GROUP by category'
@

Что обрабатывается до этого в латексных источниках:

\begin{Schunk}
\begin{Sinput}
> query <- '
+ SELECT category, count(FID) AS Number
+ FROM film_list
+ GROUP by category'
\end{Sinput}
\end{Schunk}

Вы можете корректировать исходный код в соответствии с вашими потребностями в конечном PDF, если вам не нравится стандартная упаковка Sweave. Вы можете включить весь код в свой Вопрос в блоке, я просто использовал бит SQL, потому что у вас были проблемы.

Вам не нужны ( и ) вокруг строки, которую вы присваиваете query.

4 голосов
/ 02 ноября 2010

Популярным приемом было бы иметь два блока Sweave: первый имеет echo = TRUE, eval = FALSE и предназначен просто для отображения команды, а затем второй с echo = FALSE, eval = TRUE, который фактически выполняет запрос. Более продвинутые трюки могут играть с драйвером Sweave.

Затем можно выполнить другие приемы, чтобы красиво распечатать фактический результат запроса.

...