【发布时间】:2020-04-19 23:04:28
【问题描述】:
我的目标是拥有一个可以用 n 个数据集的数组调用的函数。该函数将调用manipulate 并创建一个带有控制框的绘图。此框将包含与数据集一样多的复选框(即 n)。每个复选框将允许在绘图上显示/隐藏相应的数据集。
为了简单起见,我假设每个数据集都是一个简单的字符串。
manipulate 在控件已知时可以正常工作。这里,对于单个控件:
manipulate(plot(0,0,main=b), b=checkbox(TRUE, 'bool'))
但是,就我而言,我需要可变数量的控件。我可以像这样创建一个控件列表:
dataList = c('a', 'b', 'c')
ctrls = list()
for(data in dataList) {
ctrls[[data]] = checkbox(TRUE, data)
}
manipulate(plot(0,0), ctrls)
现在让我们看一个最小的用例:一个创建绘图的函数。它的标题将是所有具有值TRUE 的数据集名称的串联。
我最初的想法是将控件列表传递给函数,这样我就可以访问那里的每个控件。
foo <- function(dataList, ctrls) {
print(dataList)
title = ''
for(data in dataList) {
if (ctrls[[data]]) { # this fails
title=cat(title, data)
}
}
plot(0,0,main=title)
}
manipulate(foo(dataList, ctrls), ctrls)
上面的失败是因为ctrls[[data]]不是控件的值。
当控件被赋予列表中的manipulate 时,有没有办法访问控件的当前值?
【问题讨论】:
-
计数数据时datalist的值不会是
if (ctrls[[datalist]][data]? -
不,我担心这行不通
标签: r