【问题标题】:Is there a way to parse variables inside glue有没有办法解析胶水里面的变量
【发布时间】:2021-12-06 02:48:25
【问题描述】:

我正在尝试使用 R 中的胶水包解析变量。但看起来有些问题。谁能帮忙

由于我这里的变量将来会是反应性的,我正在尝试使用胶水解析它...................... .....

library(glue)
asd <- "XYZ"


HTML(glue('<html>
<head>
<style>
.dropdown {
  position: relative;
  display: inline-block;
}

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #f9f9f9;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
  padding: 12px 16px;
  z-index: 1;
}

.dropdown:hover .dropdown-content {
  display: block;
}
</style>
</head>
<body>



<div class="dropdown">
  <span>{asd}</span>
  <div class="dropdown-content">
  <p>Hello World!</p>
  </div>
</div>

</body>
</html>
'))
Error in eval(parse(text = text, keep.source = FALSE), envir) : 
  object 'position' not found

预期输出

<html>
<head>
<style>
.dropdown {
  position: relative;
  display: inline-block;
}

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #f9f9f9;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
  padding: 12px 16px;
  z-index: 1;
}

.dropdown:hover .dropdown-content {
  display: block;
}
</style>
</head>
<body>



<div class="dropdown">
  <span>XYZ</span>
  <div class="dropdown-content">
  <p>Hello World!</p>
  </div>
</div>

</body>
</html>

我正在尝试使用 R 中的胶水包解析变量。但看起来有些问题。谁能帮忙

由于我这里的变量将来会是反应性的,我正在尝试使用胶水解析它...................... .....

【问题讨论】:

  • 已编辑......

标签: r shiny r-glue


【解决方案1】:

sprintf 应该在这里工作

str1 <- sprintf('<html>
<head>
<style>
.dropdown {
  position: relative;
  display: inline-block;
}

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #f9f9f9;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
  padding: 12px 16px;
  z-index: 1;
}

.dropdown:hover .dropdown-content {
  display: block;
}
</style>
</head>
<body>



<div class="dropdown">
  <span>%s</span>
  <div class="dropdown-content">
  <p>Hello World!</p>
  </div>
</div>

</body>
</html>
', asd)

OP 代码中的错误来自它在.transformer 参数中使用的eval(parse。默认情况下,它进入identity_transformer,因此对整个字符串的评估/解析会产生问题。使用sprintf 或创建自定义.transformer 函数可能会更好

【讨论】:

  • 谢谢...但如果我使用胶水,我不确定我的代码有什么问题。你能试一下吗?否则任何知道胶水的人都可以帮助我
  • @manup 你可以使用原始字符串r
  • @manup 它与.transformer 相关,它确实评估为identity_transformer
猜你喜欢
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-20
  • 2021-07-27
  • 2015-02-14
  • 1970-01-01
相关资源
最近更新 更多