2015-03-15 11 views
6

Zastanawiam się, jak ustawić rownames matrycy, w tym wyrażenia greckie litery w R. Używam "wyrażenie", ale wydaje się nie działa. Oto mój kod poniżej.Jak wyświetlać greckie litery jako rownames matrycy

b.summary = matrix(0, 8, 6) 
colnames(b.summary)= c("Min.", "1st Qu.", "Median", "Mean","3rd Qu", "Max.") 
rownames(b.summary)= c(expression(paste(tau, "=1", sep="")),expression(paste(sigma^2, "=1", sep="")), expression(paste(tau, "=5",sep="")), expression(paste(sigma^2, "=0.2",sep="")), expression(paste(tau, "=16", sep="")), expression(paste(sigma^2, "=0.0625",sep="")), expression(paste(tau, "1/2.25", sep="")),expression(paste(sigma^2, "=2.25", sep=""))) 

Po wpisaniu b.summary, że rownames przedstawiono poniżej:

paste(tau, "=1", sep = "") 

zamiast ekspresja lateks.

Powodem, dla którego chcę greckie litery, jest to, że używam knitr do tworzenia dynamicznego dokumentu. Chcę wyświetlić wynik tej macierzy bezpośrednio, zamiast tworzyć tabelę ręcznie wpisując wszystkie elementy macierzy, używając wyrażenia \ Sexpr {}. Kompletny fragment kodu w dzianiu to:

<<coverage.b.summary, eval=TRUE, echo=FALSE>>= 
b.summary = matrix(runif(48), 8, 6) 
colnames(b.summary)= c("Min.", "1st Qu.", "Median", "Mean","3rd Qu", "Max.") 
rownames(b.summary)= labels(expression(paste(tau, "=1",  sep="")),expression(paste(sigma^2, "=1", sep="")), expression(paste(tau, "=5",sep="")), expression(paste(sigma^2, "=0.2",sep="")), expression(paste(tau, "=16", sep="")), expression(paste(sigma^2, "=0.0625",sep="")), expression(paste(tau, "=1/2.25", sep="")),expression(paste(sigma^2, "=2.25", sep=""))) 
b.summary 
@ 

Dziękujemy za pomoc!

+0

Nie jestem pewien, jak można reprezentować coś sigma do kwadratu, ale zaakceptowana odpowiedź na [to pytanie] (http://stackoverflow.com/questions/21122912/factorize--licumer-variable-w-greek-expression-in-labels-in-r) może być pomocna w większości . – nrussell

+0

Istnieją poważne ograniczenia dotyczące korzystania z obiektu macierzy, jednym z nich jest to, że rownames są wektorami znaków. Te wyrażenia są wymuszane na wektorach znaków. Lepiej wytłumaczyć cele tego wysiłku, a następnie znaleźć mniej restrykcyjną strukturę danych. Nie ma pojęcia o reprezentacji LaTexa w natywnym R i dlatego musisz zastanowić się, jakiego rodzaju używa ten obiekt danych. Ponadto funkcja wklejania w swojej formie wykresu nie ma argumentu "sep". –

+0

Rozumiem! Dziękuję bardzo za informacje i porady. Wyjaśnię wtedy cele tego wysiłku! – Crystal

Odpowiedz

5

To jest najlepsze, co mogę zrobić pod ograniczeniem używania macierzy. Rownames nie może być obiektami z klasą R expression. Buduję nazwany wektor o nazwie "greki" i wyciągam z niego wartości Unicode, używając nazw, a następnie za pomocą argumentu "recykling" etykietuję naprzemiennie rzędy z tau i sigma^2. (Niezdolność do wykorzystania wyrażeń środek nie może mieć sub-włączony w nazwach wierszy macierzy.)

greeks=c(alpha='\u03b1', tau='\u03c4', sigma='\u03c3', 
         beta='\u03b2', 
         gamma='\u03b3') 

b.summary = matrix(0, 8, 6) 
colnames(b.summary)= c("Min.", "1st Qu.", "Median", "Mean","3rd Qu", "Max.") 
rownames(b.summary)= paste0(c(greeks['tau'], paste0(greeks['sigma'],"^2")), 
           c("=1","=1", "=5", "=0.2", 
           "=16", "=0.0625", "=2.25", "=2.25")) 

> b.summary 
      Min. 1st Qu. Median Mean 3rd Qu Max. 
τ=1   0  0  0 0  0 0 
σ^2=1   0  0  0 0  0 0 
τ=5   0  0  0 0  0 0 
σ^2=0.2  0  0  0 0  0 0 
τ=16   0  0  0 0  0 0 
σ^2=0.0625 0  0  0 0  0 0 
τ=2.25  0  0  0 0  0 0 
σ^2=2.25  0  0  0 0  0 0 
+0

Dziękuję bardzo, bardzo! To jest naprawdę pomocne !!! – Crystal

2

Poprawianie @ 42- roztworu (powinno być komentarzem, ale odpowiedź ma lepsze formatowania kodu):

greeks = c(alpha='\u03b1', tau='\u03c4', sigma='\u03c3', sigmaSq='\u03c3\u00B2', beta='\u03b2', gamma='\u03b3') 
b.summary = matrix(0, 8, 6) 
colnames(b.summary) = c("Min.", "1st Qu.", "Median", "Mean","3rd Qu", "Max.") 
p1 = c(greeks['tau'], greeks['sigmaSq']) 
p2 = c("1","1", "5", "0.2", "16", "0.0625", "2.25", "2.25") 
rownames(b.summary) = paste(p1, p2, sep="=") 
b.summary 

wywołuje następujące

  Min. 1st Qu. Median Mean 3rd Qu Max. 
τ=1   0  0  0 0  0 0 
σ²=1   0  0  0 0  0 0 
τ=5   0  0  0 0  0 0 
σ²=0.2  0  0  0 0  0 0 
τ=16   0  0  0 0  0 0 
σ²=0.0625 0  0  0 0  0 0 
τ=2.25  0  0  0 0  0 0 
σ²=2.25  0  0  0 0  0 0 

W moim konkretnym przypadku jestem KnitR'ing a '' Kable czynników inflacji wariancji i SD czynniki inflacyjne dla mtcars zbiorze:

cars.vif = rbind(
    t(vif(cars.model)[,1]), 
    t(sqrt(vif(cars.model))[,1]) 
) 
rownames(cars.vif) = c("\u03c3", "\u03c3\u00B2") 
kable(cars.vif) 

Rownames with Greek symbol and superscript

KnitR'ing Wymaga xelatex i czcionki, która zawiera σ tj Arial

+2

Inna opcja: Dla przypadku wyjścia LaTeX i 'kable', składnia LaTeX może być użyta dla rownames/colnames:' colnames (cars) <- c ("$ \\ nu $", "$ \\ delta $"); knitr :: kable (samochody, ucieczka = FALSE) '. –

Powiązane problemy