我正在使用dplyr::do
计算一些值,但是我想将一些数据加入其中。
df2 <- data.frame(cat=c('a','a','b'),
cl=1,
id=c('A','B','C'))
df1 <- data.frame(cat=c('a','b'),
cl=1)
df1 %>%
group_by(cat, cl) %>%
do(ids=paste(. %>%
inner_join(df2) %>%
dplyr::select(id) %>%
unlist(), collapse=';'))
我遇到错误
as.vector(x,“ character”)中的错误: 无法将类型'closure'强制转换为类型'character'的向量
有人知道如何解决这个问题或究竟是什么问题吗?
答案 0 :(得分:3)
问题是使用点作为管道运算符的左侧,%>%
的文档指出:
将点占位符用作lhs 当将点用作lhs时,结果将是一个功能序列,即,将整个右侧链依次应用于其输入的函数。请参阅示例。
他们甚至提供了一个例子:
# Building unary functions with %>%
trig_fest <- . %>% tan %>% cos %>% sin
因此,基本上,您要提供一个功能作为paste
的输入
答案 1 :(得分:1)
尝试一下:
df1 %>%
group_by(cat, cl) %>%
do(ids=paste( inner_join(.,df2) %>%
dplyr::pull(id), collapse=';'))
不确定确切为什么会起作用,但是确实可以。