首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有HTML标签的r` `sprintf`‘提供`参数不能被回收到相同长度’

带有HTML标签的r` `sprintf`‘提供`参数不能被回收到相同长度’
EN

Stack Overflow用户
提问于 2018-05-29 10:10:51
回答 1查看 1.8K关注 0票数 0

我有一个有2行的data.frame res,我希望将值与HTML标记放在sprintf函数中。如果我使用tags$strong("some character")函数,就会得到一个错误。如果我输入<strong>some character</strong>,它就能工作。如果df中有3行代码,那么两个代码都可以工作。这是一个带有2行data.frame的MWE

代码语言:javascript
复制
res <- data.frame(term = letters[1:2], p.value = c(0.567, 0.123), hazard = c(1.234, 3.421))
sprintf(
  "%s: %s %.3f %s %.3f</br>",
  res$term,
  tags$strong("p-value: "),
  res$p.value,
  tags$strong("Hazard Ratio: "),
  res$hazard
)
# Error in sprintf("%s: %s %.3f %s %.3f</br>", res$term, tags$strong("p-value: "),  : 
#  arguments cannot be recycled to the same length
sprintf(
  "%s: %s %.3f %s %.3f</br>",
  res$term,
  "<strong>p-value: </strong>",
  res$p.value,
  "<strong>Hazard Ratio: </strong>",
  res$hazard
)
# works!
# [1] "a: <strong>p-value: </strong> 0.567 <strong>Hazard Ratio: </strong> 1.234</br>" 
# [2] "b: <strong>p-value: </strong> 0.123 <strong>Hazard Ratio: </strong> 3.421</br>"

三行data.frame

代码语言:javascript
复制
res <- data.frame(term = letters[1:3], p.value = c(0.567, 0.123, 0.231), hazard = c(1.234, 3.421, 5.211))

sprintf(
  "%s: %s %.3f %s %.3f</br>",
  res$term,
  tags$strong("p-value: "),
  res$p.value,
  tags$strong("Hazard Ratio: "),
  res$hazard
)

sprintf(
  "%s: %s %.3f %s %.3f</br>",
  res$term,
  "<strong>p-value: </strong>",
  res$p.value,
  "<strong>Hazard Ratio: </strong>",
  res$hazard
)

问题如下:

  1. 为什么当我在df中有2行并且它可以工作在3行时,它就不能工作?
  2. 为什么在两行df中它不能与tags$strong函数一起工作?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-29 17:00:32

让我们看一个最小的例子,以更清楚地看到问题。以下作品

代码语言:javascript
复制
sprintf("%s: %s",
         tags$strong("Value "),
         1:3
     )

但以下几点并没有:

代码语言:javascript
复制
sprintf("%s: %s",
         tags$strong("Value "),
         1:2
     )

显然,如果您尝试,第一个工作的任何长度的向量是3的倍数(3,6,9,.)。所有其他整数都不工作( 1除外,这是特例)。解决方案在于您闪亮的HTML标记的结构,它是一个长度为3的列表。

代码语言:javascript
复制
str( tags$strong("Value ") )

List of 3
 $ name    : chr "strong"
 $ attribs : list()
 $ children:List of 1
  ..$ : chr "Value "
 - attr(*, "class")= chr "shiny.tag"

这是一个长度为3的列表,因为字符串<strong>Value</strong>是长度为1的向量。r试图像第二个向量长一样多次重用tags$strong-Tag (在您的例子中是res$x)。遗憾的是,它的长度是3,所以它不能产生任何有用的东西,如果要求只回收2次。

另一方面,如果您只编写长度-1-字符串<strong>Value</strong>,它可以回收任何次数,甚至2次。

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

https://stackoverflow.com/questions/50581732

复制
相关文章

相似问题

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