2017-06-25 65 views
5

Pisząc np. Slajdy z wykładów, często napotykamy sytuację, w której chcielibyśmy, aby wyjściowy kod był liczbą source code = result. Tak na przykładKnitr: Pokaż kod źródłowy wstawianych fragmentów kodu

"foofoofoo qt(p = 0.95, df = 24) = 1.710882 barbarbar" 

Ale \Sexpr{qt(p = 0.95, df = 24)} dostarcza tylko drugą część tej produkcji. Jednym z nielicznych sposobów obejścia tego problemu jest pewne niewygodne w użyciu urządzenie.

Pytanie 1: Czy istnieje inne rozwiązanie?

Pytanie 2:

Hak inline tylko pozwala nam zmienić formatowanie wyniku oceny (tak jak wyżej 1.710882 powinny być wyświetlane).

Czy jest możliwe ustawienie kodu źródłowego w \Sexpr{} jako opcji wewnątrz haka wbudowanego? Wtedy mógłbym łatwo zdefiniować wyjściowy wiersz jako source = result.

Odpowiedz

4

Domyślam się, że można osiągnąć to, co chcesz, modyfikując haki, ale tylko modyfikowanie wbudowanego haka nie jest wystarczające, ponieważ jedyny argument przekazany do wbudowanego haka jest już ocenianym wynikiem i żadnym innym argumentem. A modyfikowanie wielu haczyków jest zbyt ryzykowne i nie warto. Oto coś, co osiąga to, co chcesz, przy niewielkim wysiłku. Na przykład, można zdefiniować następującą funkcję s w knitr konfiguracji fragmencie:

s <- function(x){ 
    paste0(deparse(substitute(x)), " = ", x) 
} 

a następnie można użyć coś jak r s(qt(p = 0.95, df = 24)) lub \Sexpr{s(qt(p = 0.95, df = 24))} aby uzyskać wynik, który chcesz.

Edycja: bardziej wyrafinowany sposób mogą być:

s <- function(x){ 
    paste0(deparse(substitute(x)), " = ", knitr::knit_hooks$get("inline")(x)) 
} 

Ta wersja s dadzą swoje zaokrąglone wyników liczbowych jak haku domyślny rolkach.

Edytuj: Dzięki @ user2554330 zmieniam deparse(sys.call()[[2]] na deparse(substitute(x)) według popularniejszego idiomu R.

+0

Dzięki! Nie pomyślałem o używaniu historii połączeń. To zdecydowanie lepsze niż wszystko, co dotąd widziałem i próbowałem. –

+0

Bardziej powszechnym idiomem R jest 'deparse (substytut (x))' zamiast 'deparse (sys.call() [[2]]'. – user2554330

+0

@ user2554330 Bardzo dziękuję. Odpowiednio edytuję moją odpowiedź: – Consistency