3

環境に既に存在する data.frames のリストがあるとします。

library(magrittr)
lapply(
  paste0("z", 2011:2015),
  function(x) assign(
    x, 
    data.frame(x=rnorm(10),y=rnorm(10)),
    pos = 1
  )
)
# should create z2011 through z2015 in your R env

私がやりたいことは、列を抽出し、これらを 1 つの data.frame に結合してから、追加の変数を追加して、magrittr 構文を使用してそれらがどこから来たのかを識別することです。

これは、他の手法 (つまり ldply(list)rbind.fill(listing)rbind_all(listing)do.call(rbind,...)) を使用した些細なことだと思います。私の質問のポイントは、magrittr構文を使用したアプローチを理解することです。

df <- 
   paste0("z",2011:2015) %>%
   lapply(get) %>%
   lapply(function(x) extract2(x,"x")) %>%
   # what would you do next? Another approach you think is
   # more appropriate for magrittr?

新しい変数を追加する方法がわかりません。例として、私は次のようになりたいと思います:

do.call(
  rbind, 
  lapply(
    paste0("z",2011:2015), 
    function(x) {
      data.frame(x = get(x)$x, year = x)
    }
  )
)
4

2 に答える 2

0

magrittrネストされた呼び出しを取り、それらを裏返しにすることで、慣用的なアプローチが得られると私はいつも思っていました。したがって、あなたの最後のスニペットに対してそれを行うと、

paste0("z", 2011:2015) %>%
  lapply(function(name) data.frame(x = get(name)$x, year = name)) %>% 
  do.call(rbind, .)

それは私にはうまく見えます。私は、考えられるすべてのステートメントを に分解するのが好きではありません。x %>% foo1 %>% foo2 %>% ...この状況では、これはさらに正当化されます。そうしないと、paste0変数名を再構築するために呼び出しを繰り返す必要があります (コメントで提案されているように)。

于 2015-09-09T20:46:45.843 に答える