一个奇怪的用例:我试图允许一个闪亮的标记上的文本说明符被更改,同时保留一个shiny.tag。
例如,这是我想要的输出:
library(htmltools)
library(rlang)
tags$a("boom")
#> <a>boom</a>注意,这是一个闪亮的标记:
class(tags$a("boom"))
#> [1] "shiny.tag"我想要做的是能够改变分配给文本的HTML代码(例如,分配h2而不是a。我想做这一点使用NSE和需要的输出留在一个shiny.tag,而不是转换为字符(所以所有的粘贴hack都出来了)。
这是我已经走了这么远,但似乎不能让它工作:
library(htmltools)
library(rlang)
textSorter <- function(c="a",text) {
c=enquo(c)
tags$p(UQE(c),text)
}
a <- textSorter(c = "h2",text="Success?")
a
#><p>
#> h2
#> Success?
#></p>那就差不多了..。至少我可以把标签放到输出中。但是有两个问题,显然,h2只是文本,而不是所需的包装器函数(p),有趣的是:
class(a)
#>Error in tags$UQE(c) : attempt to apply non-function输出奇怪地没有类,但是仍然以某种方式保留了它的NSE吗?
尝试将文本分类器直接推送到tags$参数中会产生以下结果:
textSorter <- function(c="a(",text) {
c=enquo(c)
tags$UQE(c)(text)
}
textSorter(c = "h2",text="Success?")
}
#> Error in textSorter(c = "h2", text = "Success?") :
#> attempt to apply non-function有什么建议吗?
发布于 2018-01-29 23:32:11
我认为您可以使用tag函数来实现这一点:
textSorter <- function(c1="a",text) {
tag(c1,text)
}
x=textSorter('h2','hello')测试它是否按预期工作:
print(x)
<h2>hello</h2>
class(x)
[1] "shiny.tag"有了这些信息,还可以很容易地更改现有shiny.tag的标记
x = tags$a('hello!')
changeTag <- function(x,y='a')
{
tag(y,x$children)
}
y <- changeTag(x,'p')再一次验证:
print(y)
<p>hello!</p>
class(y)
[1] "shiny.tag"希望这能有所帮助!
https://stackoverflow.com/questions/48500388
复制相似问题