簡體   English   中英

如何在 RStudio 查看器中預覽美人魚圖?

[英]How to preview mermaid graph in RStudio viewer?

背景:

可以“使用帶有 .mmd 文件擴展名的外部文本文件可以在 RStudio 查看器中提供語法着色和預覽的優勢”( DiagrammeR Docs

應該是這樣的: 查看器面板應該是這樣的

問題:

在我的最小工作示例中,圖形未在查看器面板中呈現,但打印了 mermaid.mmd 文件中的純文本(見下文)。 如何修復此行為,以便呈現圖表?

美人魚.mmd:

graph LR
A-->B

查看器面板中的 Output:

  • mermaid.mmd 文件中的文本打印在查看器面板中,但不是渲染圖在此處輸入圖像描述

我的設置

  • RStudio 2022.07.2(<- 最新版本)
  • R 版本 4.2.1 (2022-06-23 ucrt)
  • DiagrammerR 版本 1.0.9(<- 最新版本)
  • knitr 版本 1.40(<- 最新版本)

問題的技術原因

我發現了問題。 它是在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")

您可以像這樣運行它們一樣簡單地預覽您的代碼:

library(DiagrammeR)

DiagrammeR(
  "   
  **graph LR   
  A-->B**   
  ")

你應該能看到這個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM