Общий ответ 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")
, который производит:
deparse(substitute()) to title a plot">
В вашем конкретном примере этоне будет работать, потому что вы не хотите 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
не является вектором, что в объекте, переданном в plot, всегда будет только один $
(т. е. вы не можете использовать вложенный список, например, с приведенным выше кодом).