Почему вы храните "a"
и "x"
как символ R?:
R> str(l[[3]])
symbol a
Если вы только что сделали:
env1 <- new.env()
assign("a", 7, envir=env1)
assign("b", 8, envir=env1)
assign("x", 9, envir=env1)
ll <- list(1, 2, "a", 5, "x")
Тогда это
with(env1, get(ll[[3]]))
сработало бы:
R> with(env1, get(ll[[3]]))
[1] 7
, но это нелегко работает внутри функции из-за проблем с областями видимости.
Тем не менее, просмотр with(env1, get(ll[[3]]))
работаетВам, вероятно, не нужна функция.Также обратите внимание, что get()
принимает окружение в качестве аргумента:
R> get(ll[[3]], envir = env1)
[1] 7
Таким образом, мы могли бы написать функцию как
getNumbers <- function(obj, pos, env) {
get(obj[[pos]], envir = env)
}
, которая работает:
R> getNumbers(ll, 3, env1)
[1] 7
Редактировать: Просто для ясности, если все, что требуется, - это извлечь объект по имени (бит позиции бросил меня, поскольку это не имеет никакого смысла), то, как упоминает @hadley вКомментарий ниже, все, что нам действительно нужно, это установить окружение с помощью [[
:
R> env1[[ll[[3]]]]
[1] 7
, которое, я полагаю, если вы хотите обернуть его в функции, будет
getNumbers <- function(obj, pos, env) {
env[[obj[[pos]]]]
}
R> getNumbers(ll, 3, env1)
[1] 7