R - передать глобальную переменную в функцию, изменить ее и сохранить
Я пытаюсь построить динамическую функцию, используя eval, parse или все, что работает
Назначение функции: установщик значения.
Ввод параметров: список, название элемента списка, значение
Возвращение: на самом деле все равно
Текущий код
#call fun_lsSetValue(state_list,selected,"dropdown")
fun_lsSetValue <- function(ls,name,value){
pars <- as.list(match.call()[-1])
element <- as.character(eval(expression(pars$name)))
if(is.null(value))
eval(parse(text="ls[[element]] <- ''"))
else
eval(parse(text="ls[[element]] <- value"))
#part that I need help, I need to assign ls to "state_list" without
#having to hard coded it in this function
#I have tried everything I can think of like
#assign(deparse(substitute(ls)),ls,.GlobalEnv)
#state_list <<- ls works, but I want to be dynamic
}
Проблема, которую я обнаружил, заключается в том, что мне нужно передать значение локальной переменной "ls" туда, откуда оно динамически (state_list). Я знаю, что<- function (a, name, value) {... return (a)} work, но этот синтаксис на самом деле не мои предпочтения. Так как я пытаюсь узнать, можно ли сделать то же самое без функции out out. Любой совет будет полезен.
1 ответ
Решение
Хотя это вообще ужасная идея, что-то вроде
fun_lsSetValue <- function(ls,name,value){
lsname <- deparse(substitute(ls))
name <- deparse(substitute(name))
ls <- get(lsname, envir=globalenv())
if(is.null(value)) {
value<-''
}
ls[[name]]<-value
assign(lsname, ls,envir=globalenv())
}
должно сработать
a <- list(x=1)
fun_lsSetValue(a,x,3)
a
# $x
# [1] 3