2016-01-17 50 views
3

我想知道如何獲取列表名稱或組名作爲標誌時使用管道操作與嗚聲。例如:我想使用每個列表名稱傳遞給ggsave函數的dynameic參數。如何獲取列表名稱和切片名稱與管道和呼吸器

require(purrr) 
require(ggplot2) 
lst=list(a1=data.frame(x=1:10,y=2:11),a2=data.frame(x=1:10,y=-1*2:11)) 
df=rbind(transform(lst[[1]],id="a1"),transform(lst[[2]],id="a2")) 
lst %>% map(~ggsave(plot=qplot(data=.,x="x",y="y",geom="line"),file=paste(listname(.),".png"))) 
df %>% slice_rows("id") %>% 
    by_slice(~ggsave(plot=qplot(data=.,x="x",y="y",geom="line"),file=paste("slicename(.)",".png"))) 

的slicename(。)應該是這樣的獨特([ 「ID」]]),但使用slice_rows時它不工作。

回答

3

listnameslicename不是功能purrrnames似乎並不與purrr功能使用時返回列表元素名稱。此外,您可能想使用walk函數族,而不是mapby_slice,因爲您正在爲其副作用調用函數,而不是返回的對象。

所以,作爲一個位解決辦法,您可以嘗試

lst=list(a1=data.frame(x=1:10,y=2:11),a2=data.frame(x=1:10,y=-1*2:11)) 

    list(lst, names(lst)) %>% 
     pwalk(~ ggsave(plot=qplot(data=.x,x=x,y=y,geom="line"),filename=paste(.y,".png"))) 

新增

如果你已經從一個數據幀,可以使用

df %>% split(.$id) %>% 
     list(names(.)) %>% 
     pwalk(~ ggsave(plot=qplot(data=.x, x=x, y=y, geom="line"), filename=paste(.y,".png"))) 
+0

謝謝!所以它是分組data.frame的最佳方式: 'lst = list(a1 = data.frame(x = 1:10,y = 2:11),a2 = data.frame(x = 1: 10,y = -1 * 2:11)) df = rbind(transform(lst [[1]],id =「a1」),transform(lst [[2]],id =「a2」)) df%>%split(。[[「id」]])%>% list(。,as.character(unique(df [[id']]))%>% pwalk(〜ggsave (df [[「id」] = qplot(data = .x,x = x,y = y,geom =「line」),filename = paste(.y,「。png」)))' – earclimate

+0

])是一個因素,而不是一個字符類,結果是不同的(1.png,2.png),也許這是一個錯誤。 – earclimate

+0

我明白了,非常感謝! – earclimate

4

這是值得一提的是,使用purrr::walk2可以避免創建一個新列表lstnames(lst)個元素:

lst=list(a1=data.frame(x=1:10,y=2:11),a2=data.frame(x=1:10,y=-1*2:11)) 

purrr::walk2(
    lst, 
    names(lst), 
    ~ ggsave(plot=qplot(data=.x,x=x,y=y,geom="line"),filename=paste(.y,".png")) 
) 

更新2017年8月30日:的 「索引」 地圖功能的新家族已經在introduced 0.2.3 purrr提供用於walk2(lst, names(lst))短手:

lst=list(a1=data.frame(x=1:10,y=2:11),a2=data.frame(x=1:10,y=-1*2:11)) 

purrr::iwalk(
    lst, 
    ~ ggsave(plot=qplot(data=.x,x=x,y=y,geom="line"),filename=paste(.y,".png")) 
) 
相關問題