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



使用DPLYR和TIDYR,我试图创建一个整洁的数据集版本,其中根据某些列的数据,行可能会丢失。我创建了一个函数,该函数在一个新的tbl_df(data.frame)中返回丢失的行(通过使用默认数据创建它们)(我对它进行了单元测试,它可以与特定数据一起正常工作)。

但是,当从"bind_rows"调用它时,我会得到以下错误:数据错误。帧(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"循环,我知道这可能不是最佳的,但目前,我将使用这个版本,这样我就可以让它发挥作用,然后尝试优化我的代码(或向量化)。

谢谢!

在对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))

相关内容

最新更新