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(...)
と、ツールチップが正しく表示されます。ただし、比較的同等の を使用するとttFunc2
、空のツールチップになります。
ttFunc1(x=list(rownum=2))
と を比較するとttFunc2(x=list(rownum=2))
、機能的に同等であることがわかります。
私は何が欠けていますか?