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
Другие вопросы по тегам