0

使用 DPLYR 和 TIDYR,我正在尝试创建一个整洁的数据集版本,其中行可能会丢失,具体取决于某些列的数据。我创建了一个函数,该函数在新的 tbl_df(data.frame) 中返回丢失的行(通过使用默认数据创建它们)(我对其进行了单元测试,它适用于特定数据)。

但是,当从“bind_rows”调用它时,我收到以下错误:data.frame 中的错误(a,b,c,...:找不到对象“A”。

例如,我的数据如下所示:

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... ))myCustomFunction(A, B, C, D, E... ) 它被称为普通 R 函数,而我认为您期望它在 dplyr 函数的上下文中进行评估,mutate(x = myCustomFunction(A, B, C, D, E... ))因为参数A, B, C, D, E将被传递的 data.frame 中的字段替换由于%>%运算符,作为隐含的第一个参数。

简而言之,您需要以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 回答