使用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))