bugfix> r > 投稿
a <- data.frame(x = c(1, 2))
b <- data.frame(x = c(3, 4))
for (df in list(a, b)) {
  print(df)
  df$y <- c(5, 6)
}

各データフレームは正しく印刷されますが、列の追加は失敗します。
広範なウェブ検索は次のようなものを提案しました

lapply(list(a, b), function(df){
  df$y <- c(5, 6)
})

しかし、これは私を助けませんでした。

私も非常に興味があるのは、なぜ for の印刷文ループは機能しますが、 y の追加列が失敗します。

これは私にとって驚くべきことです。

回答 2 件
  • あなたは df を返さなければなりません がその追加列にあります。 試してください:

    lapply(list(a, b), function(df){
      df$y <- c(5, 6); return(df)
    })
    
    

    出力は次のとおりです。

    [[1]]
      x y
    1 1 5
    2 2 6
    [[2]]
      x y
    1 3 5
    2 4 6
    
    

    @ dash2が想定しているように、これらの変更された df を割り当てることができます。 あなたの list に   df の の。したがって、完全なコードは次のようになります。

    a <- data.frame(x = c(1, 2))
    b <- data.frame(x = c(3, 4))
    l <- list(a, b)
    l <- lapply(l, function(df){ df$y <- c(5, 6); return(df) })
    
    

  • > a <- data.frame(x = c(1, 2))
    > b <- data.frame(x = c(3, 4))
    > l <- list(a = a, b = b)
    > list2env(lapply(l, function(x) {x$y <- c(5, 6);x}), envir = .GlobalEnv)
    <environment: R_GlobalEnv>
    > a
      x y
    1 1 5
    2 2 6
    > b
      x y
    1 3 5
    2 4 6
    
    

あなたの答え