dplyrのrowwise()とパイプを使用して、データフレーム内の各行に関数(リストを返す)を適用したいと考えています。単純な関数(それは8の追加については明らかに、リストを返す関数についてではありません)の定義Rのパイプでdplyrのrowwise()を使用して各行にリストを返す関数を適用するにはどうすればよいですか?
test_tbl <- tibble(a=c(2, 4), b=c(0, 8), c=c(5, -3))
:2行の
テストデータセット
simple_function <- function(input) {
list(input + 8)
}
は、これは私が望むものです
apply(test_tbl ,1, function (x) simple_function(x))
これは2つのリスト(私の希望する出力)のリストを返します。
私はそれらのリストをチブルの列として保存したいと思います。私たちは何ができる:
:私はむしろ(また、コードの読みやすさのために)dplyr、ベース、およびパイプを混合よりもdplyrを使用したいが、これは動作しない理由を私は理解していないtest_tbl %>% mutate(output = apply(. ,1, function (x) simple_function(x)))
を
test_tbl %>% rowwise() %>% simple_function
test_tbl %>% rowwise() %>% mutate(output = simple_function(.))
これらの関数はどちらも、別々の行ではなくデータフレーム全体に関数を適用します。 test_tbl %>% rowwise() %>% simple_function
は、所望の出力が得られないtest_tbl %>% simple_function
これに(出力の面で)同じですが、私は列を自分自身をバインドする必要があること、それはかなり冗長ではない理想的な見つける:それはように私には意味がありません
test_tbl %>% rowwise() %>% do(output= simple_function(.)) %>% bind_cols(test_tbl, .)
rowwise()
が失敗している理由についての助けがあれば大歓迎です。私たちは、 `test_tbl%>%mutate_all(低速運行(。+ 8))必要
内の関数を適用し'。なぜ出力が 'list'であるべきかは不明です。そうでない場合は、単に 'mutate_all'の中に追加してください。 – akrun
単純な関数が例です。私が適用したい機能はもっと複雑です(これは列の値に基づいていくつかのデータフレームを生成します)。重要な点は、リスト列が形成され、各行ごとにリストが作成されることです。 – Gert