2

のパイピング チェーン内でいくつかのオブジェクトをオンザフライで変更しようとしていますmagrittr。初挑戦:

1:3 %>% (function(x) {x[1] <- 42; x})
#[1] 42  2  3  

を使用した短いオプションl:

1:3 %>% (l(x ~ {x[1] <- 42; x}))
#[1] 42  2  3

ラムダを定義しなくても同じことが可能かどうか知りたいです。それを行う最短の方法は何ですか?そのために代入演算子<-とプレースホルダーを使用できます.か? に似たもの(読みやすさに注意してください)

1:3 %>% {.[1] <- 42} # invisible 42 instead

最後の結果が自然であることは理解しています (演算子は目に見えない値を返します)。どうすればそれを回避できますか?

4

3 に答える 3

1

eg data.frames を使用すると、このwithin関数が役立ちます。

iris %>%
  within({
    Sepal.Length <- 10
    Width.Square <- Sepal.Width^2
  }) 

dplyr::mutateただし、効率と速度が懸念される場合は、この特定のタスクに使用することもできます。

withinリストでも動作します:

list(a = 1, b = 2) %>%
  within({
    a = 3
    d = 4
  })

@Spacedman: おそらくいくつかのエイリアス ala extract(用[) を追加し[<-て、ゴルフの例をより良くすることができます:)

編集: v1.5 エイリアスinsetでは、およびそれぞれinset2に追加されました。[<-[[<-

于 2014-07-13T18:08:21.653 に答える