Chciałbym scalić wektory tekstu łacińskiego i greckiego, aby wygenerować tytuły działek, etykiety osi, wpisy do legend itp. Dostarczyłem trywialne przykład poniżej. Nie wiem, jak wyrenderować greckie litery w ich rodzimej postaci. Próbowałem różnych kombinacji expression
, parse
i do polecenia , ale nie udało mi się wektoryzować kodu, który łatwo generuje mieszany tekst łaciński/grecki dla przypadku pojedynczego wyrażenia (np. expression("A ("*alpha*")")
jest odpowiedni w przypadku pojedynczego wyrażenia).R: tworzenie wektorów wyrażenia łacińskiego/greckiego dla tytułów działek, etykiet osi lub legend
data<-matrix(seq(20),nrow=5,ncol=4,byrow=TRUE)
colnames(data)<-c("A","B","C","D")
greek<-c(" (alpha)"," (beta)"," (gamma)"," (delta)")
matplot(data)
legend(1,max(data),fill=c("black","red","green","blue"),apply(matrix(paste(colnames(data),greek,sep=""),nrow=4,ncol=1),1,expression))
mógłbyś mi pomóc z rachunku apply()
w rachunku legend()
? Wymaga pewnych modyfikacji w celu wytworzenia pożądanego wyniku (tj. A (α), B (β), C (γ), D (δ)). Z góry dziękuję.
Dzięki, Josh. Twoje rozwiązanie jest bardzo odporne na różne dane wejściowe. Czy możesz wyjaśnić, dlaczego 'A (B)', 'A * B' i' A ~ B' działają w wyrażeniu 'substitute', a' A B' nie? Czy mógłbyś również skomentować nowych użytkowników, dlaczego wymagana jest składnia 'as'? Czytałem, że 'substitute' zwraca nieuznane wyrażenie, więc działanie na wyjściu' substitute' z 'as.expression' ma sens. A co z 'as.name'? – user001
@ user001 - Jak zapewne wiesz, [ta sekcja] (http://cran.r-project.org/doc/manuals/R-lang.html#Computing-on-the-language) w języku "R" Definicja "jest dobrym punktem wyjścia do oparcia się na elementach języka R i jak nimi manipulować. 'substitute()' może przyjąć jako swój pierwszy argument dowolne składniowo poprawne wyrażenie. 'A B' nie jest" dozwolone ", ponieważ jest poprawne składniowo. (Czy możesz wymyślić jakieś polecenie R wpisane w wierszu poleceń, który ma tę formę? Myślałem, że nie!). –
@ user001 - 'substitute()' nie * ogólnie * zwraca obiekty klasy "expression". (Zobacz sekcję "Value" w '? Substitute' i baw się z' class (substitute()) ', aby zobaczyć co mam na myśli:' class (substitute (x)); class (substitute (x (y))) class (substitute ({x; y})); class (substitute (expression (x))) 'itp.) Używam' as.expression() 'do wymuszania * tego, co * zwraca do obiektu wyrażenia. wyrażenia są rodzajem wektora, więc 'sapply()' po prostu łączy kilka wyrażeń długości-1 w jeden wektor ekspresyjny o długości 4. Zobacz '? As.name', aby dowiedzieć się więcej o' as.name() '. Mam nadzieję że to pomoże! –