Предположим у меня есть следующие функции:Присвоить элемент списка в родительском фрейме
f1 <- function()
{
get.var <- function(v)
{
for(n in 1:sys.nframe())
{
varName <- deparse(substitute(v, env = parent.frame(n)))
if(varName != "v")
{
break
}
}
return(list(name = varName, n = n))
}
f2 <- function(v)
{
print(v)
# get original variable name and environment
obj <- get.var(v)
#below doesn't work as expected - this is where q$a and q$b would be updated
assign(obj$name, v + 1, env = parent.frame(obj$n))
}
f3 <- function(v){ f2(v) }
f4 <- function(v){ f3(v) }
q <- list(a = 2, b = 3)
f4(q$a)
f3(q$b)
}
Как я могу обновить значение q$a
и q$b
от f2
? Ситуация заключается в том, что аналогичная процедура вызывается в некоторых из моего кода для проверки количества аргументов во вложенном списке. Если значение неверно, элемент списка необходимо обновить, чтобы отобразить правильное значение. Это, безусловно, уродливый способ сделать это, но, к сожалению, я не могу передать весь список каждой функции проверки.
Вопрос был несколько схожий вопрос был задан here, но вместо этого пользователь проходил элемент списка.
Вы можете попробовать 'q $ b << - TRUE'. – cryo111
Хорошая точка. Я обновил код, чтобы вы могли понять, почему это невозможно в этом случае. – ruser45381