我有一个有2行的data.frame res,我希望将值与HTML标记放在sprintf函数中。如果我使用tags$strong("some character")函数,就会得到一个错误。如果我输入<strong>some character</strong>,它就能工作。如果df中有3行代码,那么两个代码都可以工作。这是一个带有2行data.frame的MWE
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
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
)问题如下:
df中有2行并且它可以工作在3行时,它就不能工作?df中它不能与tags$strong函数一起工作?发布于 2018-05-29 17:00:32
让我们看一个最小的例子,以更清楚地看到问题。以下作品
sprintf("%s: %s",
tags$strong("Value "),
1:3
)但以下几点并没有:
sprintf("%s: %s",
tags$strong("Value "),
1:2
)显然,如果您尝试,第一个工作的任何长度的向量是3的倍数(3,6,9,.)。所有其他整数都不工作( 1除外,这是特例)。解决方案在于您闪亮的HTML标记的结构,它是一个长度为3的列表。
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次。
https://stackoverflow.com/questions/50581732
复制相似问题