[R]dplyr及ggplot2中的变量引用列的问题
问题描述:
存在这么一个场景,当需要动态选择列作为dplyr或ggplot2的输入时,列名的指定会出现问题。
以iris举例:
# 以iris dataset为例
colnames <- c("Sepal.Length", "Sepal.Width", "Petal.Length","Petal.Width","Species") for (col in colnames) {
ggplot(data = iris, aes(x = Sepal.Length, y = col)) + geom_point()
}
上面的代码会报错。在ggplot2和dplyr中,我们指定列是`y = Sepal.Length`, 而通过变量指定列时,是` y = 'Sepal.Length'`, 注意这个引号。这个引号导致了dplyr和ggplot2包匹配列的失效。
相关的问题,Hadley(dplyr和ggplot2包作者)在这里有描述:https://dplyr.tidyverse.org/articles/programming.html
========================================原文看不太懂,大概翻译一下========================================
大多数dplyr函数都使用非标准计算(non-standard evaluation, NSE),即这些函数都不遵循常规的R语言计算规范。这些函数获取用户输入的表达式, 并以自己的方式做计算。采用这种方案给dplyr代码带来2个主要的好处:
1. 使dplyr的data frame操作能够简洁的表达,因为不需要重复输入data frame的名字。比如,在dplyr中的代码可以这样表示: filter(df, x == 1, y == 2, z == 3),而不需要以传统的方式df[df$x == 1 & df$y == 2 & df$z == 3, ]
2. dplyr可以使用不同于原生R的计算方式。这点对数据库后端很重要,因为dplyr实际上并不做任何工作,它只是生成SQL语言,告诉数据库该做什么。由数据库来计算结果。
不过,这种方案同时也带来两个主要的缺陷:
1. 大多数
[R]dplyr及ggplot2中的变量引用列的问题的更多相关文章
- MyBatis mapper文件中的变量引用方式#{}与${}的差别
MyBatis mapper文件中的变量引用方式#{}与${}的差别 #{},和 ${}传参的区别如下:使用#传入参数是,sql语句解析是会加上"",当成字符串来解析,这样相比于$ ...
- Python中的变量引用对象需注意的几点
Python中的变量引用对象需注意的几点 分类:Python (55) (0) 普通引用: Python中,变量的作用仅仅是一个标识,只有赋值后才被创建,它可以引用任何类型的对象,而且在引用之前必须 ...
- ][mybatis]MyBatis mapper文件中的变量引用方式#{}与${}的差别
转自https://blog.csdn.net/szwangdf/article/details/26714603 MyBatis mapper文件中的变量引用方式#{}与${}的差别 默认情况下,使 ...
- JavaScript中var变量引用function与直接声明function
今天在h5开发app的过程中遇到了一个js问题,function的执行问题 在js中声明函数function有这两种方法 var A=function(){...} 或者 function A(){. ...
- springboot 配置文件中属性变量引用方式@@解析
这种属性应用方式是field_name=@field_value@. 两个@符号是springboot为替代${}属性占位符产生,原因是${}会被maven处理,所以应该是起不到引用变量的作用. @@ ...
- BeanShell中Sring变量引用
问题现象:BeanShell中,一个String类型的字符串存在多个变量,通过${}引用变量后,发送到服务器的还是${} 解决方法:String类型数据中存在多个变量时,使用"+变量+&qu ...
- python中的变量引用小结
python的变量都可以看成是内存中某个对象的引用.(变量指向该内存地址存储的值) 1.python中的可更改对象和不可更改对象 python中的对象可以分为可更改(mutable)对象与不可更改(i ...
- [转载]MyBatis mapper文件中的变量引用方式#{}与${}的差别
转载自:http://blog.csdn.net/szwangdf/article/details/26714603 默认情况下,使用#{}语法,MyBatis会产生PreparedStatement ...
- Linux 变量引用和命令替换
1.变量引用 name=Andy echo $name 或 echo ${name} 2.命令替换 把命令的执行结果赋值给变量,使用倒引号或者$() APP_HOME=`pwd` 或 APP_HOME ...
随机推荐
- Math & Number Theory
数学 数论: 莫比乌斯反演 矩阵游戏 小学数学,欧拉定理 组合: 线性代数: 高斯消元 其他: 一些题目
- User-Agent 请求消息头
User-Agent User-Agent, 用户代理 请求消息头,其中包含了 客户机.客户端 的一些信息, 如 浏览器版本 和 类型, 操作系统的类型等. 具体解析 步骤, 推荐以下 博客文章 ...
- git添加删除远程tag
git tag -a test20190108_1 -m "fix bug" git push origin test20190108_1 git push origin :ref ...
- 查看open office运行状态
打开SSH工具: 1.ps -ef|grep soffice 2.cd /opt/jboss-eap-7.0 3.cd logs 4.tail -f subscription.log 然后就可以操作( ...
- CMDB资产管理系统开发【day25】:表结构设计1
资产表 # _*_coding:utf-8_*_ __author__ = 'jieli' from assets.myauth import UserProfile from django.db i ...
- mysql My SQL获取某个表的列名
My SQL获取某个表的列名 DESC TableName SHOW COLUMNS FROM TableName SELECT COLUMN_NAME FROM information_schem ...
- JS转换HTML转义符,编码及解码
JS转换HTML转义符 //去掉html标签 function removeHtmlTab(tab) { return tab.replace(/<[^<>]+?>/g,'') ...
- [物理学与PDEs]第5章第5节 弹性动力学方程组及其数学结构
5.5.1 线性弹性动力学方程组 1. 线性弹性动力学方程组 $$\beex \bea 0&=\rho_0\cfrac{\p{\bf v}}{\p t}-\Div_x{\bf P}-\r ...
- java8 按对象属性值排序
//按id从小到大 List<User> sortUser = list.stream().sorted((u1, u2) -> u1.getId().compareTo(u2.ge ...
- spring和mybatis的整合开发(基于MapperScannerConfigurer的整合开发(适用于复杂项目,接口较多的情况))
在实际项目中,Dao层会包含很多接口,这样会导致spring配置文件过于臃肿.这时就需要采用扫描包的形式来配置mybaits中的映射器. 采用MapperScannerConfigurer来实现. M ...