2017-08-04 76 views
0

我没有向您显示我的真实代码,因为它很庞大而且很难看。 但我使用了标准的R包重建的问题:如何添加函数参数作为剧情标题与lapply?

# a list of a few r standard datasets 
datasets <- list(PlantGrowth, cars, faithful) 

# a function that plots a dataset and adds its name to the title 
plotstuff <- function(dataset) { 
    plot_title <- substitute(paste("Plot of ", dataset, sep=" ")) 
    plot(dataset, main = plot_title) 
} 

数据集(即函数参数)的名称成功添加到情节标题,当我运行像

plotstuff(PlantGrowth) 
plotstuff(cars) 
plotstuff(faithful) 
个别数据集功能

因为我有很多的数据集我想与lapply要做到这一点是这样的:

lapply(datasets, plotstuff) 

但在这样做,所以我得到奇怪的标题:地块[ (X,i)而不是数据集的名称。 如何使用lapply在剧情标题中显示数据集的名称?

以下是我能找到的唯一相关主题。 (而且它并没有真正帮助...)

Use variable name as plot title with lapply

编辑: 谢谢! 但我似乎并不了解另一个例子。

“的列表项的名称lapply使用,而不是:”

lapply(names(afn), function(x) plot(afn[[x]], main=x)) 

首先,我加名添加到列表:

datasets <- list(PlantGrowth = PlantGrowth, cars = cars, faithful = faithful) 

然后我想:

plotstuff <- function(dataset) { 
    chart_title <- substitute(paste("Plot of ", dataset, sep=" ")) 
    plot(datasets[[dataset]], main = chart_title) 
} 
lapply(names(datasets), plotstuff) 

没有工作......我也不想引用函数内部的列表数据集。如果我想稍后用另一个名字来使用第二个列表呢? 有人知道这个例子的解决方案吗?

+1

您的列表没有名字,所以也没有办法了'lapply'可能认识他们。尝试'名称(数据集)'。为了比较,“L = list(a = 1,b = 2)”。 – Frank

+0

为列表命名,然后使用链接的副本作为指导。 –

+0

谢谢!做到了。我仍然卡住(见编辑)... –

回答

0

像其他问题一样,lapply不会做你想要的。当它应用该函数时,它将它应用于列表的元素,而不是用于创建列表的项目。

如何:

datasets <- list(PlantGrowth = PlantGrowth, cars = cars, faithful = faithful) 

plotstuff <- function(dataset, name) { 
    plot_title <- paste("Plot of ", name, sep=" ") 
    dev.new() 
    plot(dataset, main = plot_title) 
} 

mapply(plotstuff, dataset = datasets, name = names(datasets)) 
+0

谢谢! mapply看起来很有希望! 当我这个代码时,我得到了三个弹出窗口,所有三个数字与正确的标题! 但是当我检查RStudio右下角的图时,我只能找到第一个图(PlantGrowth的图)。 我试图再次运行代码,但第二次无法运行。 我不明白dev.new()是做什么的。任何提示? –

+0

@ mire-mike,'dev.new'打开一个新的绘图窗口。如果您没有使用'dev.new',则每个绘图都会在同一个绘图窗口中覆盖之前的绘图。我认为RStudio应该为每个'dev'打开标签,但我最近没有使用过RStudio。 – mikeck