gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 22:52:17 25 4
gpt4 key购买 nike

我想知道是否有人可以帮助我在函数中使用变量名。
我整理了一个点图,对变量进行排序,然后生成位图,但是我无法获得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")
  • 在函数的第二行中,我想传递变量
    名称,类似
    `if (is.null(Title)) {Title=varname(x)} else {Title=Title}`

    这样我就不必在“标题”字段中输入“Blood”
    (例如Dplotter(mydata $ id,mydata $ blood)

    基本上,如何在函数中粘贴变量名?它
    如果可以从
    标题(未附加数据集,我被告知是不好的
    练习),这样就不必获取mydata$blood,而只需获取
    标题中的“血统”。

    我没有找到简单的解决方案来将变量名称粘贴到
    一个功能。如您所料,将变量名称放在paste()函数返回变量的值(这样,
    情节标题将填充值而不是变量名)。
  • 我还想进一步自动化该功能,以便我可以
    只需放入数据集和ID,然后重复执行该功能
    对于数据集中的每个变量。显然这需要解决
    问题1首先,否则标题和文件名都将遇到
    问题。
  • 最佳答案

    通用答案是deparse(substitute(x))。例如。

    fooPlot <- function(x, main, ...) {
    if(missing(main))
    main <- deparse(substitute(x))
    plot(x, main = main, ...)
    }

    它正在使用中:
    set.seed(42)
    dat <- data.frame(x = rnorm(1:10), y = rnorm(1:10))
    fooPlot(dat, col = "red")

    产生:

    但是在您的特定示例中,这不起作用,因为您不希望 dat$x作为标题,而只想要 x。但是,我们可以做更多的操作:
    fooPlot <- function(x, main, ...) {
    if(missing(main)) {
    main <- deparse(substitute(x))
    if(grepl("\\$", main)) {
    main <- strsplit(main, "\\$")[[1]][2]
    }
    }
    plot(x, main = main, ...)
    }
    fooPlot(dat$x, col = "red")的哪个给出:

    请注意,此代码做出了一些假设,即 main不是矢量,并且传递给绘图的对象中将永远只有一个 $(即,您无法在上述代码中使用嵌套列表)。

    关于r - 将变量名称传递给绘图函数标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9666151/

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