0

DPLYR と TIDYR を使用して、特定の列のデータによっては行が欠落する可能性があるデータセットの整頓されたバージョンを作成しようとしています。新しい tbl_df(data.frame) で (デフォルト データで作成することにより) 不足している行を返す関数を作成しました (ユニット テストを行い、特定のデータで問題なく動作します)。

ただし、「bind_rows」から呼び出すと、次のエラーが発生します: data.frame(a, b, c,...: Object 'A' not found. でエラーが発生しました。

たとえば、私のデータは次のようになります。

A        B        C        D        E        ...
a1       b1       c1       d1       e1       ...
a2       b2       c2       d2       e2       ...
...

私のコードは次のようになります。

data_tidy <- data %>%

    <some other functions to clean up like 'mutuate', 'filter', etc.> %>%

    brind_rows(myCustomFunction(A, B, C, D, E... ))

私が間違っていることはありますか?私はまだR、DPLYR / TIDYRに慣れていません...

注: 「bind_rows」への最後の呼び出しを削除すると、テーブルは適切な A、B、C などの列で期待どおりにクリーンアップされます。この特定のシナリオでは「for」ループも使用しますが、これは最適ではない可能性がありますが、今のところ、このバージョンで作業して、コードを最適化 (またはベクトル化) できるようにします。

ありがとう!

4

1 に答える 1

1

への呼び出し foo %>% brind_rows(myCustomFunction(A, B, C, D, E... ))では、通常の R 関数として呼び出されていますが、引数が渡された data.frame のフィールドに置き換えられるmyCustomFunction(A, B, C, D, E... ) 場合のように、dplyr 関数のコンテキスト内で評価されることを期待していると思います演算子のおかげで、暗黙的な最初の引数として。mutate(x = myCustomFunction(A, B, C, D, E... ))A, B, C, D, E%>%

myCustomFunction(A, B, C, D, E... )つまり、次のように、引数が正しくスコープされるように呼び出す必要があります。

data_tidy <- data %>% 
    <some other functions to clean up like 'mutuate', 'filter', etc.>

brind_rows(do.call(myCustomFunction,data_tidy))
于 2015-02-26T21:33:19.213 に答える