我想做一些不寻常的事情......
我在全局范围内创建了一个变量,但是,我想在函数中使用它来自字符串。
通常,我会使用abc <- eval(parse(text=paste(test, "_ext", sep = "")))
并在函数末尾用abc更新test_ext。在这种特殊情况下,这是不可能的,所以我想创建一些......
a <- 10 #global scope
b <- 5 #global scope
test <- function(letter)
{
letter <<- letter + 10
}
test("b")
一旦更新letter
,就会更新b
。
这可能吗?
答案 0 :(得分:1)
以下是应该执行此操作的方式:
mylist <- list(a=10, b=5)
# $a
# [1] 10
#
# $b
# [1] 5
test <- function(funlist,letter)
{
funlist[[letter]] <- funlist[[letter]] + 10
funlist
}
mylist <- test(mylist,"b")
mylist
# $a
# [1] 10
#
# $b
# [1] 15
很抱歉,但在你提出问题时回答这个问题,我不会支持你的不良做法。函数不应该在R中有副作用(这意味着:不要使用<<-
)。
答案 1 :(得分:1)
您可以创建仅包含您要操作的对象的自定义环境,而不是乱用全局环境。当你更改一个你不想改变的变量时,这可以避免在轨道上引起很多问题。
这样的事情:
e <- new.env()
e$a <- 10
e$b <- 5
test <- function(letter)
{
if(!exists(letter, e, inherits=FALSE)) stop("object ", letter, " not found")
val <- get(letter, e) + 10
assign(letter, val, e)
}