r - magrittr 管道未评估点在函数参数中传递了第二个管道
问题描述
当第二次使用点来重用管道左侧的数据时,将点传递给函数. %>% 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") 中的错误:无法将类型“闭包”强制转换为“字符”类型的向量
c('a', 'b', 'c') %>% `names<-`(., identity(.))
# a b c
#"a" "b" "c"
解决方案
以 开头的管道.
生成一个函数。
例如,. %>% 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())
推荐阅读
- python - 使用 pandas 库时出现“return self._engine.get_loc(casted_key)”错误
- sql - 配对两个表中的行,如果第二个表中不存在,则仅显示第一个表的内容
- r - 无法写入 csv 文件
- go - cap 为相同的底层数组返回不同的值
- vue.js - 基于文本输入禁用按钮
- caching - 如何在 Grails 中启用缓存的情况下将不同的服务器同步到 GORM 层
- ruby - 从 RPM 安装的捆绑器,无法识别已安装捆绑器
- android - SendBird 只推送一个通知 - android
- react-router-redux - 如何使用 react-router-redux 包装组件
- python - 蝗虫多用户登录