2017-04-15 56 views
0

我生成一堆圖並將它們寫入列表變量,如下所示。各地儘可能多的地塊下面的代碼r將字符串解釋爲列表元素

graphsListHolder <- list() 

循環,因爲我做

filename <- paste some elements together to create a unique name 
graphsListHolder[[filename]] <- p # p is the name of the ggplot plot 

我保存graphsListHolder爲.rds文件。

後來我想在res文件中閱讀,從graphListHolder文件中選擇圖並用grid.arrange顯示。我可以對繪圖編號進行硬編碼,以下示例在運行時可以正常工作,繪製兩個圖形,一個在另一個之上。

grid.arrange(
    graphsListHolder[[3]], graphsListHolder[[5]] 
) 

但是,如果我構造一個字符變量temp像這樣(或變體,這一點)

temp <- "graphsListHolder[[3]], graphsListHolder[[5]]" 

並更改grid.arrange代碼

grid.arrange(
     temp 
    ) 

我得到

Error in gList(list("graphsListHolder[[3]], graphsListHolder[[5]]", wrapvp = list(: 
    only 'grobs' allowed in "gList" 
In addition: Warning message: 
In grob$wrapvp <- vp : Coercing LHS to a list 

我也試過eval(parse(text = temp)沒有成功。

回答

1

我不知道你怎麼想選擇他們,而是說你有元素的矢量你想

x <- c(3,5) 

那麼你可以做

grid.arrange(grobs=graphsListHolder[x]) 

試圖把任意字符串轉換成可執行代碼通常不是一個好主意。經常有在R.

更 「傳統」 的替代品例如

graphsListHolder<-Map(function(x) { 
    ggplot(data.frame(x=1:10, y=x*1:10)) + geom_point(aes(x,y)) + ggtitle(x)}, 1:5) 
x <- c(3,5) 
grid.arrange(grobs=graphsListHolder[x])