使用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'循环,我知道这可能不是最佳的,但是现在,我将使用这个版本,这样我就可以使它工作,然后尝试优化我的代码(或矢量化)。
谢谢!
答案 0 :(得分:1)
在您对foo %>% brind_rows(myCustomFunction(A, B, C, D, E... ))
的调用中,myCustomFunction(A, B, C, D, E... )
被称为普通R函数,而我认为您期望在dplyr函数的上下文中对其进行评估,如{ {1}}其中参数mutate(x = myCustomFunction(A, B, C, D, E... ))
将替换为data.frame中的字段,由于A, B, C, D, E
运算符而作为隐式第一个参数传递。
简而言之,您需要以正确确定参数范围的方式调用%>%
,例如:
myCustomFunction(A, B, C, D, E... )