7

purrrでパイプ操作を使用する場合、リスト名やグループ名をフラグとして取得する方法が気になります。例: 各リスト名の動的パラメータを ggsave 関数に渡したいとします。

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(.) は unique(.[["id"]]) のようなものにする必要がありますが、slice_rows を使用する場合は機能しません。

4

2 に答える 2

6

これを使用すると、 and要素を使用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-08-30 更新: 「インデックス付き」マップ関数の新しいファミリが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"))
)
于 2016-06-14T16:04:27.567 に答える