首页 文章

R:DPLYR包:调用自定义函数时bind_rows失败

提问于
浏览
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'循环,我知道这可能不是最佳的,但是现在,我将使用这个版本,所以我可以让它工作,然后尝试优化我的代码(或矢量化) .

谢谢!

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 将被数据中的字段替换 . 由于 %>% 运算符而作为隐式第一个参数传递的帧 .

    简而言之,您需要调用 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))
    

相关问题