[英]Function to preview a chunk of html in the RStudio viewer pane
[英]How to preview mermaid graph in RStudio viewer?
背景:
可以“使用帶有 .mmd 文件擴展名的外部文本文件可以在 RStudio 查看器中提供語法着色和預覽的優勢”( DiagrammeR Docs )
應該是這樣的:
問題:
在我的最小工作示例中,圖形未在查看器面板中呈現,但打印了 mermaid.mmd 文件中的純文本(見下文)。 如何修復此行為,以便呈現圖表?
美人魚.mmd:
graph LR
A-->B
查看器面板中的 Output:
我的設置
問題的技術原因
我發現了問題。 它是在DigrammeR::mermaid()
函數中處理 extern.mmd 文件的實現。
在mermaid()
- 函數中, htmlwidgets::createWidget(name = "DiagrammeR", x = x, width = NULL, height = NULL, package = "DiagrammeR")
- 函數采用處理后的輸入 x 並呈現圖形。 此函數需要格式為“\ngraph LR\nA-->B\n”的輸入,其中每個輸入都以“\n”開頭和結尾,美人魚代碼中的每一行也由“\n”分隔。 但是來自 extern.mmd 文件 ( readLines("mermaid.mmd", encoding = "UTF-8", warn = FALSE)
) 的輸入看起來像這樣:
"graph LR" "A-->B" (每行美人魚代碼的分隔字符串)
將輸入轉換為所需的格式可以通過mermaid.code <- paste0("\n",paste0(mermaid.code, collapse = "\n"),"\n")
不幸的是,這個處理步驟沒有在DigrammeR::mermaid()
中為 extern.mmd 文件實現
靈魂
構建一個新的 mermaid()-function,包括所需的處理步驟
用新的 function 替換 DiagrammeR 包中的 mermaid()-函數
# Build new mermaid()-function mermaid.new = function (diagram = "", ..., width = NULL, height = NULL) { is_connection_or_file <- inherits(diagram[1], "connection") || file.exists(diagram[1]) if (is_connection_or_file) { diagram <- readLines(diagram, encoding = "UTF-8", warn = FALSE) diagram <- paste0("\n",paste0(d, collapse = "\n"),"\n") # NEW LINE } else { if (length(diagram) > 1) { nosep <- grep("[;\n]", diagram) if (length(nosep) < length(diagram)) { diagram[-nosep] <- sapply(diagram[-nosep], function(c) { paste0(c, ";") }) } diagram = paste0(diagram, collapse = "") } } x <- list(diagram = diagram) htmlwidgets::createWidget(name = "DiagrammeR", x = x, width = width, height = height, package = "DiagrammeR") } #Replace mermaid()-function in DiagrammeR-package if(.require("R.utils")) install.packages("R.utils") library(R,utils) reassignInPackage(name="mermaid", pkgName="DiagrammeR". mermaid,new: keepOld=FALSE) # Test new function DiagrammeR:.mermaid("mer.mmd")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.