如何在Sweave中使用SQL查询格式化R源代码,而不删除我的换行符?

时间:2010-11-02 18:01:28

标签: mysql r latex sweave

我使用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

然后我在Sweave生成的PDF中获得以下输出:

> 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查询在页面上运行。

有没有办法让LaTeX输出显示SQL查询?

2 个答案:

答案 0 :(得分:9)

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}

如果标准Sweave包装不符合您的喜好,您可以在最终PDF中自由调整源代码以满足您的需求。您可以在问题中包含问题中的所有代码,我只使用了SQL位,因为这是您遇到问题的原因。

您不需要将()围绕分配给query的字符串。

答案 1 :(得分:4)

一个流行的技巧是有两个Sweave块:第一个有echo = TRUE,eval = FALSE,仅用于显示命令,然后第二个有echo = FALSE,eval = TRUE实际运行查询。 Sweave司机可以使用更高级的技巧。

然后,您可以使用其他技巧来打印实际的查询结果。