2012-08-16 19 views
2

我使用lapply命名的地塊,正在由lapply

讓我們說我有這個功能

plot <- function(x){ 
    ggplot(x,aes(x=timepoints,means)) + 
     geom_point() + 
     geom_line() + 
     scale_x_continuous(name='some name') + 
     scale_y_continuous(name='another name') + 
     geom_errorbar(aes(ymin=means-stderrs,ymax=means+stderrs),width=2) + 
     opts(title = names(x))  
}     

我要創建圖的列表(由ggplot2)環這個循環通過數據幀的列表,這裏是名單內的兩個數據幀的例子:

$name1 

    means stderrs  timepoints 
1 603.784863 289.952382  0 
2 120.00  99.000   20 
$name2 
    means stderrs 
1 17.425819 5.204339   0 
2 25.9  8.0    20 

我的問題: 的names(x)我的ggplot函數的一部分將命名每個plot'means',而不是該數據幀的實際名稱(例如, name1,name2) 該函數在list[[i]],我想要那個實際的數據幀的名稱,這將是names(list[i])

問題: 有沒有辦法引用列表中的外層,可以這麼說?或者有沒有更簡單的方法來獲得這些地塊名單和他們各自的名字?

+0

很少你需要在'ggplot'中使用這個構造。你可以用一個完整的例子擴展你的問題,包括你正在子集的初始列表嗎? – Justin 2012-08-16 21:24:22

+0

做了這個幫助嗎? – Doug 2012-08-16 21:31:49

+0

,看起來像你要繪製一個具有未定義的'x'座標,'時間點'的單點。您可以隨時將其他項目添加到保存名稱的列表中。但最短的答案是否定的,'lapply'只查看列表元素中的數據,不知道外部列表或其名稱。或者使用'lapply(seq_along(yourlist),...)'和索引類似於你描述的方式。 – Justin 2012-08-16 21:37:17

回答

2

這不是很漂亮,但它的工作原理。

plot2 <- function(x, title){ 
    ggplot(x,aes(x=timepoints,means)) + 
     geom_point() + 
     geom_line() + 
     scale_x_continuous(name='some name') + 
     scale_y_continuous(name='another name') + 
     geom_errorbar(aes(ymin=means-stderrs,ymax=means+stderrs),width=2) + 
     opts(title = title) 
} 

lapply(names(your_list), function(x) plot2(your_list[[x]], x))