foo "> foo "> foo " />

Как преобразовать имя переменной (object) в String

У меня есть следующий фрейм данных с именем переменной "foo" ;

 > foo <-c(3,4);

Я хочу сделать преобразование "foo" в строку. Так что в функции Мне не нужно воссоздавать дополнительные дополнительные переменные:

   output <- myfunc(foo)
   myfunc <- function(v1) {
     # do something with v1
     # so that it prints "FOO" when 
     # this function is called 
     #
     # instead of the values (3,4)
     return ()
   }
79
nl ja de
Просто любопытно - зачем вам нужно получить имя объекта от объекта?
добавлено автор Chinmay Patil, источник
Использовать exists() , для которого требуется строка.
добавлено автор Elin, источник
У меня есть пример использования: у меня есть функция, которая принимает в качестве аргумента вектор и добавляет значения этого вектора в столбец в фреймворке данных. Мне также нужно заполнить в другом столбце источник значения, который является именем исходного вектора. Вуаля.
добавлено автор Ricky, источник

1 ответы

Вы можете использовать deparse и substitute , чтобы получить имя аргумента функции:

myfunc <- function(v1) {
  deparse(substitute(v1))
}

myfunc(foo)
[1] "foo"
164
добавлено
Как вы это сделаете с несколькими объектами? В частности, как бы вы это сделали, чтобы получить отдельные строки для каждого имени объекта? (Например, если у меня были объекты foo, foo1 и foo2, и я хотел создать список их имен в виде отдельных строк символов).
добавлено автор theforestecologist, источник
@SvenHohenstein это не работает, когда вы используете цикл for ...
добавлено автор SumNeuron, источник
@MahdiJadaliha Вы можете попробовать эту функцию: myfunc <- function (v1) {s <- substitute (v1); if (length (s) == 1) deparse (s) else sub ("\\ (.", "", s [2])} .
добавлено автор Sven Hohenstein, источник
@theforestecologist Если функция имеет несколько параметров, вы можете использовать deparse (substitute (.)) для каждого параметра, сохранить результат в переменной и затем поместить переменные в список.
добавлено автор Sven Hohenstein, источник
+1. Благодарим за полезный ответ, а что если я передаю foo [1] ; есть ли способ вернуть «foo» обратно?
добавлено автор Mahdi Jadaliha, источник
вы также можете использовать deparse (quote (var)), в котором цитата замораживает var от оценки и deparse, которая является инверсной для разбора, возвращает символ в строку
добавлено автор cloudscomputes, источник