我想创建一个Shiny R应用程序,它可以使用用户输入无格式的Stata代码,添加html标签,并返回整个代码块,以便轻松复制并粘贴到html发布场所,如博客或网页。
我已经有了可以处理格式A Stata HTML syntax highlighter in R的R代码。大多数Shiny实现似乎都很容易。我遇到的主要挑战是创建一个html文本框或其他对象,可以轻松地从Shiny的server.R中获取一个反应元素,并将其返回给用户而不格式化html标签。
示例:
通过文本框输入的Stata代码
clear
set obs 4000
gen id = _n
gen eta1 = rnormal()
gen eta2 = rnormal()
XX Shiny提交按钮XX
在另一个文本框中返回
<span style="color: #9900FF">set</span> <span style="color: #0000CC"><b>obs</b></span> 4000
<span style="color: #0000CC"><b>gen</b></span> id = <span style="color: #9900FF">_n</span>
<span style="color: #0000CC"><b>gen</b></span> eta1 = <span style="color: #9900FF">rnormal</span>()
<span style="color: #0000CC"><b>gen</b></span> eta2 = <span style="color: #9900FF">rnormal</span>()
总的来说,我认为对于一个可能非常简单的答案来说,这通常是一个很长的问题。谢谢你的考虑。
答案 0 :(得分:2)
renderText()
不解析HTML标记。例如。如果你这样做:
output$code <- renderText({
paste0(
'<span style="color: #9900FF">set</span> <span style="color: #0000CC"><b>obs</b></span> 4000',
'<span style="color: #0000CC"><b>gen</b></span> id = <span style="color: #9900FF">_n</span>',
'<span style="color: #0000CC"><b>gen</b></span> eta1 = <span style="color: #9900FF">rnormal</span>',
'<span style="color: #0000CC"><b>gen</b></span> eta2 = <span style="color: #9900FF">rnormal</span>'
)
})
这是您的ui.R
:
library(shiny)
shinyUI(pageWithSidebar(
headerPanel("Code"),
sidebarPanel(
),
mainPanel(
verbatimTextOutput("code")
)
))
内容仅仅是文字。
但是既然你还没有发布你的ui.R(或index.html),我不确定你是如何渲染输出的。如果您在显示原始文本而不是解析HTML时遇到问题,则可以随时将<
替换为<
,将>
替换为>
,如下所示:
html <- '<span>text</span>'
x <- gsub('<', '<', html)
gsub('>', '>', x)
这将生成:<span>text</span>
,不应在浏览器中显示为已解析的HTML。