gpt4 book ai didi

r - 将字符串传递给 ggplot 函数

转载 作者:行者123 更新时间:2023-12-04 04:33:16 26 4
gpt4 key购买 nike

我想要一个可以应用于任何符合条件的对象的函数,并且有一个很好的 ggplot带有回归线打印的散点图。

但是,我无法概括我可以在 REPL 上做什么带代码。

所以我有这个工作:

require(ggplot2)    
require(xts)
set.seed(1)
dd = xts(cbind(rnorm(10), runif(10)), order.by = Sys.Date() + 1:10)
names(dd) <- c('d1', 'd2')

gp <- ggplot(data = dd,
aes(x = d1, y = d2)) +
geom_point(shape=1) +
geom_smooth(method = lm)

但这失败了
PointReg <- function(Xts, a=1, b=2) {
stopifnot(is.xts(Xts),
ncol(Xts) >1)
tempData <- Xts[, c(a,b)]
gPlot <- ggplot(data = tempData,
aes(x = colnames(tempData)[1],
y = colnames(tempData)[2])) +
geom_point(shape=1) +
geom_smooth(method = lm)
gPlot
}

我做错了什么?

最佳答案

您的函数自 aes() 起引发错误尝试评估数据列名中的参数。更具体地说,aes()尝试评估 colnames(tempData)[1]作为列名,而此列不存在。

要解决此问题,您必须以某种方式告诉 ggplot您没有传递列名,而是传递将解析为列名的表达式(字符串)。

使用 aes_string()为此。具体来说,只需替换aes()aes_string() .试试这个:

PointReg <- function(Xts, a=1, b=2) {
stopifnot(is.xts(Xts),
ncol(Xts) >1)
tempData <- Xts[, c(a,b)]
gPlot <- ggplot(data = tempData,
aes_string(x = colnames(tempData)[1],
y = colnames(tempData)[2])) +
geom_point(shape=1) +
geom_smooth(method = lm)
gPlot
}

enter image description here

关于r - 将字符串传递给 ggplot 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20210905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com