为何R向函数传递列时视为对象而非字符串?以qplot为例
关于ggplot2 qplot函数列名传递的疑问解答
为什么加引号会报错?
当你写x = "X_COLUMN"时,qplot会把这个带引号的字符串当成一个离散的常量值来处理,而不是去dataset里读取对应列的数据。直方图(geom="histogram")要求x是连续变量,用离散值自然会触发报错,提示你要么换用统计频数的stat="count",要么改用连续变量。为什么不加引号能运行,但单独打印X_COLUMN却找不到?
这是因为ggplot2的函数(包括qplot)采用了**非标准求值(NSE)**机制:函数会优先在你指定的data参数(也就是dataset)内部查找变量名,而不是直接去全局环境搜索。所以写x = X_COLUMN时,qplot会在dataset里找到这一列并使用;但你单独在控制台输入X_COLUMN,是在全局环境找这个对象,它本来就不存在(只作为dataset的列存在),所以会提示找不到。如果想用字符串传递列名怎么办?
可以用ggplot2提供的.data代词来实现,写法如下:qplot(x = .data[["X_COLUMN"]], geom = "histogram", data = dataset, binwidth = 10)这种方式适合需要动态指定列名的场景(比如循环或函数传参时)。
内容的提问来源于stack exchange,提问作者paris45390
相关产品推荐
相关产品推荐

