如何使用tags$...
ggvis 交互式图形中的功能?
一个“小”且人为的例子:
library(ggvis)
library(shiny)
n <- 20
data <- data.frame(
xs = 1:n, ys = rnorm(n),
color = sample(c('red', 'green', 'blue'), n, replace = TRUE),
size = 25 * sample(6, n, replace = TRUE),
rownum = 1:n)
ttFunc1 <- function(x) {
paste('<table>',
paste(apply(data.frame(n = names(data),
x = unlist(format(data[x$rownum,]))), 1,
function(h) paste('<tr><td>', h[1],
'</td><td>', h[2],
'</td></tr>')),
collapse = ''),
'</table>')
}
ttFunc2 <- function(x) {
tags$table(
lapply(1:ncol(data),
function(cc) {
tags$tr(tags$td(names(data)[cc]),
tags$td(format(data[x$rownum,cc])))
}))
}
shinyApp(
ui = fluidPage(
uiOutput('gg_ui'),
ggvisOutput('gg')
),
server = function(input, output, session) {
data %>%
ggvis(~xs, ~ys, key := ~rownum) %>%
layer_points(fill := ~color, size := ~size) %>%
add_tooltip(ttFunc2, 'hover') %>%
bind_shiny('gg', 'gg_ui')
},
options = list(height = 500)
)
(不可否认,这对于构建表格来说不是最优雅的。)
当我在行ttFunc1
内使用时add_tooltip(...)
,工具提示会正确显示。但是,当我使用 relative-equivalentttFunc2
时,它是一个空的工具提示。
ttFunc1(x=list(rownum=2))
与with的比较ttFunc2(x=list(rownum=2))
表明它们在功能上是等效的。
我错过了什么?