2012-08-28 17 views
5

Tablo adlarında knitr'de bir R yığınında alt çizgi olan bir veritabanını çağırmalıyım. Birkaç bin tablo ismi var ve isimleri değiştirmek büyük bir güçlük olurdu. şey gibi:Knitr'de alt çizgi geçişi R kodu

<<classRun,fig=FALSE,print=FALSE,echo=FALSE>>= 
getdat = function(nbr1,nbr2){ 
library(RODBC) 
database.dsn1<-c("db") 
database.user1<-c("username") 
database.password1<-c("password") 
channel<-odbcConnect(database.dsn1, database.user1, database.password1) 
dat = sqlQuery(channel,paste("select * from table_",nbr1,"_",nbr2, sep="")) 
} 
@ 

<< results='asis', echo = FALSE>>= 
dat = getdat(10,20) 
print(dat) 
@ 

ben $ çünkü "table_10_20" in alt çizgi arasında ("$ takılı Eksik") eksik hatası alıyorum. '\ $ \' ve '\ $ \' ekleyerek çok oynadım. Ayrıca kedi(), ve paste(), ve tek tırnak ve çift tırnak ile oynadı. Baska öneri? Yardımlarınız için şimdiden teşekkür ederiz. Ubuntu 11.10'u çalıştırıyorum ve eğer önemliyse pdfLaTeX ile RStudio'dan knitr'i arıyorum.

+0

Ayrıca ile SQL deyimi sonlandırmak gerekecek: (gerçekten her tabloda basılmış olur ne yönünü ve nasıl kontrol edebilirsiniz, daha fazla ayrıntı için belgelere bakın) xtable önerisi için bir –

cevap

11

Şansınız, alt çizgi içeren bir sütun isminiz var. results='asis' tüm çıktıların sadece dokümanın olduğu gibi olduğunu unutmayın. Ben knitr aracılığıyla bu çalıştırırsanız

% test.Rnw 
\documentclass[a4paper]{article}             
\begin{document}                 
<<classRun, fig=FALSE, print=FALSE, echo=FALSE>>=        
table_10_20 <- data.frame(col_1=1:10, col_2=runif(10))       
@                    

<<results='asis', echo=F>>=              
print(table_10_20)                
@                    
\end{document} 

ben "$ eklenen Kayıp" olsun:

Örneğin, bu sorunun bir tekrarlanabilir bir örnektir.

Ben üretilen alır .tex dosyasına bakarsanız, ben bakın:

% test.Rnw 
\documentclass[a4paper]{article}             
.... lots of tex .... 
\begin{document} 

    col_1 col_2 
1  1 0.69699 
2  2 0.12988 
3  3 0.19662 
4  4 0.04299 
5  5 0.08750 
6  6 0.72969 
7  7 0.19818 
8  8 0.27855 
9  9 0.81806 
10 10 0.56135 

\end{document} 

dosya içine olduğu gibi sütun adları col_1 ve col_2 sadece çöpe nasıl görüyor musunuz? Peki, LaTeX'te bir alt çizgi sadece matematik modunda geçerli olan özel bir anlam (altyazı) içerir, bu nedenle LaTeX derleyicisi, hatayı vererek, kelime etrafında matematik modu sınırlayıcılarını ($) koymaya çalışır.

Sizin durumunuzda, çıktılarınız için ne istediğinize bağlı olarak birkaç seçeneğiniz vardır. results='asis' ile

  1. Kullanım \begin{verbatim} çizgi korumak için. Bu, çıktınızı verbatim ortamına dökecektir.

    \begin{verbatim} 
    <<results='asis', echo=F>>=  
    print(table_10_20)        
    @  
    \end{verbatim} 
    

    using verbatim

  2. kullanın results='markup': Bu sweave renkler dışında bir kelimesi kelimesine ortamda çıkışı gibidir. Varsayılan olarak, her satırın önüne bir yorum işareti (##) koyar; Bu kullanımı kaldırmak için comment=NA. (Bu resmin yukarıdakilerden nasıl farklı olduğunu çok iyi göremezsiniz; belgenin geri kalanından ayırt etmek için gri bir arkaplan dışında aynıdır. echo=T'u kullandığınız zamankiyle aynıdır).

    <<results='markup', comment=NA, echo=F>>=  
    print(table_10_20) 
    @  
    

    using results=markup

  3. yukarıdaki iki yazı ile sabitlenmiş içinde olduğu gibi basitçe tabloyu yazdırmak. Uygun bir lateks tablo istiyorsanız, data.frame (& benzeri) uygun bir LaTeX (veya HTML) işaretlemesi dönüştürebilen xtable gibi bir paket kullanabilirsiniz. Sanırım bunu yapabilecek başka paketler de var ama şu an kaçarlar. Burada results='asis' kullanın.

    <<results='asis', echo=F>>=  
    library(xtable)  
    print(xtable(table_10_20), include.rownames=FALSE) 
    @     
    

    using xtable

+0

+1 yarı-kolon: bu tabloları knitr veya Sweave'de sunmak daha iyi bir yoldur. –

+0

Yardımlarınız için teşekkürler, bir çekicilik gibi çalıştı. –