第二次使用点重用管道左侧的数据时,将点传递到函数. %>% f()
与将点放在函数括号f(.)
中不同。为什么会这样?
调试%>%运算符将显示。 %>%identity()计算得出的是功能序列而不是字符向量,这会导致names<-
失败。我不知道如何强制对此进行评估。
# Error
c('a', 'b', 'c') %>% `names<-`(., . %>% identity())
# Works
c('a', 'b', 'c') %>% `names<-`(., identity(.))
c('a', 'b', 'c') %>% `names<-`(., . %>% identity())
as.vector(x,“ character”)中的错误: 无法将类型'closure'强制转换为类型'character'的向量
c('a', 'b', 'c') %>% `names<-`(., identity(.))
# a b c
#"a" "b" "c"
答案 0 :(得分:6)
以.
开头的管道会生成一个函数。
例如,. %>% identity
与function(.) identity(.)
相同。
因此
# Error
c('a', 'b', 'c') %>% `names<-`(., . %>% identity())
被视为
c('a', 'b', 'c') %>% `names<-`(., function(.) identity(.))
这意味着names<-
的第二个参数是函数,而不是字符向量。
这在Using the dot-place holder as lhs中有记录。
要解决此问题,请尝试
c('a', 'b', 'c') %>% `names<-`(., (.) %>% identity())