我需要绘制一个散点图,用变量的列号而不是名称来寻址变量,即代替ggplot(dat, aes(x=Var1, y=Var2))
我需要像ggplot(dat, aes(x=dat[,1], y=dat[,2]))
这样的东西。 (我说“某事”是因为后者不起作用)。
这是我的代码:
showplot1<-function(indata, inx, iny){
dat<-indata
print(nrow(dat)); # this is just to show that object 'dat' is defined
p <- ggplot(dat, aes(x=dat[,inx], y=dat[,iny]))
p + geom_point(size=4, alpha = 0.5)
}
testdata<-data.frame(v1=rnorm(100), v2=rnorm(100), v3=rnorm(100), v4=rnorm(100), v5=rnorm(100))
showplot1(indata=testdata, inx=2, iny=3)
# Error in eval(expr, envir, enclos) : object 'dat' not found
最佳答案
使用ggplot2 V3.0.0
的新功能对@Shadow的答案进行了变形:
showplot <- function(indata, inx, iny){
nms <- names(indata)
x <- nms[inx]
y <- nms[iny]
p <- ggplot(indata, aes(x = !!ensym(x), y = !!ensym(y)))
p + geom_point(size=4, alpha = 0.5)
}
testdata <- data.frame(v1=rnorm(100), v2=rnorm(100), v3=rnorm(100), v4=rnorm(100), v5=rnorm(100))
names(testdata) <- c("a-b", "c-d", "e-f", "g-h", "i-j")
showplot(indata=testdata, inx=2, iny=3)
ensym
从变量中包含的字符串创建一个符号(因此我们首先必须在函数的开头创建这些变量),然后!!
取消对它的引用,这意味着它将像您已输入函数原始名称一样工作。!!
仅在旨在支持它的函数(通常是tidyverse函数)的上下文中起作用,否则仅表示“不是”(类似于as.logical
)。
关于r - 通过变量编号在AES中寻址x和y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15323269/