2014-02-07 2 views
0

Я знаю, что функция get может помочь вам преобразовать значения в имена переменных, например get(test[1]). Но я считаю, что он несовместим, когда значения находятся в формате списка. Ниже приведен пример:В R, как использовать значения в качестве имен переменных

> A = c("obj1$length","obj1$width","obj1$height","obj1$weight") 
> obj1 <- NULL 
> obj1$length=c(1:4);obj1$width=c(5:8);obj1$height=c(9:12);obj1$weight=c(13:16) 
> get(A[1]) 
Error in get(A[1]) : object 'obj1$length' not found 

В этом случае, как я могу получить имя переменной?

+0

имена (obj1) [1] получит имя переменной 'length' –

+0

Я не понимаю, как вы думаете, 'get' работает. Имя переменной IS 'obj1 $ length'. Используя ваш код, правильный способ получить «obj1 $ length» будет выглядеть как 'get ('obj1') $ length'. Я не знаю, почему вы это сделаете. – rawr

ответ

2

get не работает, как, что вам нужно указать переменную и окружающей среды (список приводится к одному) отдельно:

get("length",obj1) 
[1] 1 2 3 4 

Делают это с данными у вас есть, вам нужно использовать eval и parse:

eval(parse(text=A[1])) 
[1] 1 2 3 4 

Однако, я предлагаю вам пересмотреть свой подход к проблеме, как get, eval и parse тупые инструменты, которые могут укусить вас позже.

0

Я думаю, что eval() функция будет делать трюк, среди других целей.

Eval (A [1])

> [1] 1 2 3 4

Вы также можете найти полезную эту простую функцию я реализовывал (основанный на широко используется комбинированный Eval, разобрать, паста):

< оценить -функции (..., Envir = .GlobalEnv) {Eval (синтаксический анализ (текст = паста (..., сентябрь = "")), Envir = Envir)}

Он объединяет и оценивает несколько объектов типа символа. Если вы хотите использовать его внутри другой функции, добавить в начале вашей функции

ENVIR < - среда()

и использовать его как это:

оценки ([объекты некоторых символов], Envir = Envir)

Попытка, например

myvariable1 < - "aaa"; myvariable2 < - "bbb"; aaa < -15; bbb < -3

оценить (myvariable1, "*", myvariable2).

Мне очень полезно, когда мне приходится оценивать похожие предложения с несколькими переменными или когда я хочу создавать переменные с автоматически сгенерированными именами.

для (я в 1: 100) {оценки ("переменная", я, "< -2 *", я)}

+1

Если эта функция действительно существует и делает то, что вы говорите, вам, по крайней мере, нужно будет сказать, в каком пакете она находится. – joran

+0

Моя ошибка, @joran. Я использую собственную функцию для оценки символов и объектов, содержащих символы, которые я назвал так, и я немного смутился. Во всяком случае, вот он, если он может помочь кому-либо: оценить <-функция (..., envir = .GlobalEnv) { eval (parse (text = paste (..., sep = "")), envir = envir)} – Rufo

+0

@Rufo: Я думаю, что вы должны включить свою оценку в свой ответ; Наверное, это действительно полезная обертка. Кроме того, вы могли бы объяснить использование отступов '...'? Например. 'оценка (A [1], A [2])' не делает того, что я ожидал. Возможно, вы имели в виду 'lapply (list (...), eval)' и т. Д.? –

Смежные вопросы