2017-06-25 39 views
5

例如,在編寫演講幻燈片時,我們經常會遇到一種情況,我們希望將內聯代碼輸出爲source code = result。因此,例如Knitr:顯示內嵌代碼塊的源代碼

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

但是\Sexpr{qt(p = 0.95, df = 24)}只提供該輸出的第二部分。幾個解決方法之一是

\Sexpr{highr::hi_latex('qt(p = 0.95, df = 24)')} $=$ \Sexpr{qt(p = 0.95, df = 24)} 

這是有點不舒服使用。

問題1:還有其他解決方案嗎?

問題2:

內聯鉤子只允許我們改變評價結果(高於1.710882所以應如何顯示)的格式。

是否有可能使\Sexpr{}中的源代碼作爲內聯鉤子中的選項提供?然後我可以很容易地將內聯輸出定義爲source = result

回答

4

我想通過修改鉤子可以實現你想要的,但只修改內聯鉤子是不夠的,因爲傳遞給內聯鉤子的唯一參數已經是評估結果並且沒有任何其他參數。修改很多鉤子太冒險了,不值得。這裏有些東西可以很輕鬆地達到你想要的效果。例如,你可以在你knitr設置塊定義以下功能s

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

然後你就可以使用像r s(qt(p = 0.95, df = 24))\Sexpr{s(qt(p = 0.95, df = 24))}東西得到你想要的結果。

編輯:更復雜的方式可能是:

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

這的s版本會給你的圓角數字結果只是作爲默認的內聯掛鉤。

編輯:感謝@ user2554330,我更改deparse(sys.call()[[2]]deparse(substitute(x))後面更常見的R習語。

+0

謝謝!沒有想過使用通話記錄。這絕對比我迄今爲止所見到和嘗試的任何其他方式都要好得多。 –

+0

一個比較常見的R習語是'deparse(substitute(x))'而不是'deparse(sys.call()[[2]]' – user2554330

+0

@ user2554330非常感謝,我對我的回答做出了相應的編輯 – Consistency