2017-08-04 38 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

相關問題