我在R中有以下列表:
logFramesChartInfo <- list(columnName="quality_logframes_overall", guageChartTitle="Logframes", guageChartId="logframes_quality", histogramChartTitle="Logframes Quality")
indicatorsChartInfo <- list(columnName="quality_indicators_overall", guageChartTitle="Logframes", guageChartId="indicators_quality", histogramChartTitle="Indicators Quality")
我想用它们中的每一个调用一个函数,为了减少代码冗余,我想使用一个循环来实现这一点,例如
chartInfos <- list("logFramesChartInfo" = logFramesChartInfo, "indicatorsChartInfo" = indicatorsChartInfo)
for (key in ChartInfos) {
myFunction(chartInfos[key])
}
为了测试这一点,我使用了以下内容:
myFunction(chartInfos["logFramesChartInfo"])
这不起作用——我是作为R Shiny应用程序的一部分运行的,我没有收到错误,而是图表没有显示。
但是,如果我使用上面定义的logFramesChartInfo
变量调用我的函数:
myFunction(logFramesChartInfo)
将显示图表。
所以现在要显示多个图表,我必须进行多次调用,如下所示:
myFunction(logFramesChartInfo)
myFunction(indicatorsChartInfo)
...
如何对所有chartInfo
进行迭代?
看起来只需要使用[[
而不是[
就可以在列表中向下移动一个级别。你的函数得到了一个长度为1的列表,但它不知道该怎么处理。比较:
length(chartInfos["logFramesChartInfo"])
# [1] 1
length(chartInfos[["logFramesChartInfo"]])
# [1] 4
您可以在此处了解索引运算符之间的区别。