首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shiny.tag上的NSE

shiny.tag上的NSE
EN

Stack Overflow用户
提问于 2018-01-29 19:38:40
回答 1查看 55关注 0票数 2

一个奇怪的用例:我试图允许一个闪亮的标记上的文本说明符被更改,同时保留一个shiny.tag。

例如,这是我想要的输出:

代码语言:javascript
复制
library(htmltools)
library(rlang)
tags$a("boom")
#> <a>boom</a>

注意,这是一个闪亮的标记:

代码语言:javascript
复制
class(tags$a("boom"))
#> [1] "shiny.tag"

我想要做的是能够改变分配给文本的HTML代码(例如,分配h2而不是a。我想做这一点使用NSE和需要的输出留在一个shiny.tag,而不是转换为字符(所以所有的粘贴hack都出来了)。

这是我已经走了这么远,但似乎不能让它工作:

代码语言:javascript
复制
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),有趣的是:

代码语言:javascript
复制
class(a)
#>Error in tags$UQE(c) : attempt to apply non-function

输出奇怪地没有类,但是仍然以某种方式保留了它的NSE吗?

尝试将文本分类器直接推送到tags$参数中会产生以下结果:

代码语言:javascript
复制
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

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-29 23:32:11

我认为您可以使用tag函数来实现这一点:

代码语言:javascript
复制
textSorter <- function(c1="a",text) {
  tag(c1,text)
}
x=textSorter('h2','hello')

测试它是否按预期工作:

代码语言:javascript
复制
print(x)
<h2>hello</h2>

class(x)
[1] "shiny.tag"

有了这些信息,还可以很容易地更改现有shiny.tag的标记

代码语言:javascript
复制
x = tags$a('hello!')
changeTag <- function(x,y='a')
{
  tag(y,x$children)
}
y <- changeTag(x,'p')

再一次验证:

代码语言:javascript
复制
print(y)
<p>hello!</p>
class(y)
[1] "shiny.tag"

希望这能有所帮助!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48500388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档