shiny.tag 上的 NSE
NSE on shiny.tag
一个奇怪的用例:我试图允许更改闪亮标签上的文本说明符,同时保留 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,而不是转换为字符(所以所有的粘贴黑客都没有了)。
这是我已经达到的程度,但似乎无法让它发挥作用:
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>
所以这很接近...至少我可以将标签放入输出...但是有 2 个问题,显然,h2
只是文本,而不是所需的包装函数(p
), 有趣的是:
class(a)
#>Error in tags$UQE(c) : attempt to apply non-function
输出神秘地没有 class,但仍然以某种方式保留它的 NSE?
尝试将文本 classifier 直接推入 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
有什么建议吗?
我认为你可以为此使用 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"
希望对您有所帮助!
一个奇怪的用例:我试图允许更改闪亮标签上的文本说明符,同时保留 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,而不是转换为字符(所以所有的粘贴黑客都没有了)。
这是我已经达到的程度,但似乎无法让它发挥作用:
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>
所以这很接近...至少我可以将标签放入输出...但是有 2 个问题,显然,h2
只是文本,而不是所需的包装函数(p
), 有趣的是:
class(a)
#>Error in tags$UQE(c) : attempt to apply non-function
输出神秘地没有 class,但仍然以某种方式保留它的 NSE?
尝试将文本 classifier 直接推入 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
有什么建议吗?
我认为你可以为此使用 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"
希望对您有所帮助!