R - 将全局变量传递给函数,修改并保存

时间:2014-08-19 03:56:03

标签: r eval

我尝试使用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
}

我发现的问题是我需要传递一个局部变量的值&#34; ls&#34;动态来自哪里(state_list) 我知道&lt; - function(a,name,value){... return(a)}工作,但这种语法真的不是我的偏好。 因为我试图学习如果没有功能的分配方面可以做同样的事情。 任何建议都会有所帮助。

1 个答案:

答案 0 :(得分: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