我写了一个函数,使用数据框中每列的名称创建一个div。 我希望div的文本成为数据框的"labels"
attr
library(shiny)
df <- data.frame(x = c(1, 2, 3), y = c(4, 5, 6), z = c(7, 8, 9))
attr(df$x, "labels") <- "a"
attr(df$y, "labels") <- "b"
attr(df$z, "labels") <- "c"
rowBlocks <- function(data, name, label)
{
div(
drag = name,
div(class = "active-title", id = name, label))
}
lapply(sort(colnames(df[,1:3])), rowBlocks,
#Rather than have "Text below,
# How do I get the df attr "label" on hover?
data = df, label = "Text")
我不确定如何表达这个问题,但是我认为我需要使用一个带有两个函数的lapply,而且我也在努力访问lapply中的attr。
[[1]]
<div drag="x">
<div class="active-title" id="x">a</div>
</div>
[[2]]
<div drag="y">
<div class="active-title" id="y">b</div>
</div>
[[3]]
<div drag="z">
<div class="active-title" id="z">c</div>
</div>
我尝试使用label = attr(df$name, "label")
,但它按字面意义解释名称,而不使用实际的name变量...感谢您的帮助!
答案 0 :(得分:1)
您可以更改rowBlocks函数以从数据中查找标签
rowBlocks <- function(data, name){
div(
drag = name,
div(class = "active-title", id = name, attr(data[[name]],"labels")))
}
lapply(sort(colnames(df[,1:3])), rowBlocks,
data = df)
或者您可以更改调用方式以迭代名称和标签
rowBlocks <- function(name, label){
div(
drag = name,
div(class = "active-title", id = name, label))
}
cols <- sort(colnames(df[,1:3]))
Map(rowBlocks, cols, sapply(cols, function(x) attr(df[[x]], "labels")))
在这里,我们使用Map
而不是lapply
,因为我们需要遍历多个输入。