Аргумент функции роли как символьная строка?

Супер быстрый вопрос...

Как вы берете какой-то конкретный аргумент функции (определяемый пользователем) и применяете его как строку символов?

Если для простого примера

foo <- function(x) { ... }

Я хочу просто вернуть имя объекта x. Таким образом,

foo(testing123)

возвращает "testing123" (и тестирование123 может быть просто случайным числовым вектором)

Извиняется, если этот вопрос задан раньше - обыскал, но не смог его найти! Спасибо!!

Ответы

Ответ 1

foo <- function(x) deparse(substitute(x))

Ответ 2

Мета-ответ: если вы знаете, что R что-то делает, и вы хотите это сделать, проверьте источник. Например, вы могли заметить, что plot(foo) использует "foo" в ylab, поэтому сюжет может это сделать. Как? Начните с кода:

> plot
function (x, y, ...) 
{
    if (is.function(x) && is.null(attr(x, "class"))) {
        if (missing(y)) 
            y <- NULL
        hasylab <- function(...) !all(is.na(pmatch(names(list(...)), 
            "ylab")))
        if (hasylab(...)) 
            plot.function(x, y, ...)
        else plot.function(x, y, ylab = paste(deparse(substitute(x)), 
            "(x)"), ...)
    }
    else UseMethod("plot")
}

И там есть волшебство deparse(substitute(x)).

Ответ 3

Упс, видимо, я не искал достаточно трудно...

foo <- function(x) {return(as.character(substitute(x)))}

Хорошо, что легко...