将变量名称传递给绘图函数标题

Mar*_*o M 9 r function variable-names

我想知道是否有人可以帮我在函数中使用变量名.我已经整理了一个点图,它对变量进行排序然后生成一个位图,但是我无法R将变量名称传递给plot标题.

示例数据

id<-c(1,2,3)
blood<-c(1,2,10)
weight<-c(1,2,13)


mydata<-as.data.frame(cbind(id,blood,weight))
mydata$blood

#######SORTED DOT PLOT####


Dplotter<-function (id,x,Title=""){
if (is.null(Title)) {Title=""} else {Title=Title} 

DIR<-paste("C:/temp/WholePlots/New/",Title,".bmp",sep="")

D<-as.data.frame(cbind(id,x))
x1<-as.data.frame(D[order(x),])

bmp(DIR)
dotchart(x1$x,labels=id,main=Title,pch=16)
dev.off()
}


###############
Dplotter(mydata$id,mydata$blood,"Blood")

Dplotter(mydata$id,mydata$weight,"Weight")
Run Code Online (Sandbox Code Playgroud)
  1. 在函数的第二行,我想传递变量名称,例如

    `if (is.null(Title)) {Title=varname(x)} else {Title=Title}`
    
    Run Code Online (Sandbox Code Playgroud)

    这样我就不必在函数Title字段中输入"Blood"(例如Dplotter(mydata $ id,mydata $ blood)

    基本上,如何在函数中粘贴变量名?如果可以从标题中取出数据集名称(没有附加数据集,我被告知这是不好的做法)会更好,这样mydata$blood你就可以获得标题中的"鲜血".

    我没能找到一个简单的解决方案来粘贴函数中的变量名.您可以猜测,将变量名称放在 paste()函数中会返回变量的值(以便绘图标题用值而不是变量名称填充).

  2. 我还希望进一步自动化该功能,这样我就可以放置数据集和ID,然后为数据集中的每个变量重复该功能.显然,这需要首先解决问题1,否则标题和文件名都会遇到问题.

Rei*_*son 13

一般的答案是deparse(substitute(x)).例如

fooPlot <- function(x, main, ...) {
    if(missing(main))
        main <- deparse(substitute(x))
    plot(x, main = main, ...)
}
Run Code Online (Sandbox Code Playgroud)

它在使用中:

set.seed(42)
dat <- data.frame(x = rnorm(1:10), y = rnorm(1:10))
fooPlot(dat, col = "red")
Run Code Online (Sandbox Code Playgroud)

哪个产生:

使用<code>dat$x</code>标题,你想要的只是<code>x</code>.然而,我们可以做一些操作:</p>

<pre><code>fooPlot <- function(x, main, ...) {
    if(missing(main)) {
        main <- deparse(substitute(x))
        if(grepl(Run Code Online (Sandbox Code Playgroud)

这对于fooPlot(dat$x, col = "red")给:

第二次尝试

请注意,此代码做了一些假设,即main不是向量,只有$在传递给绘图的对象中才有一个(即,您不能使用嵌套列表,例如上面的代码).