R超级分配向量

时间:2018-12-14 12:59:44

标签: r

我有一个函数,可以在其中使用超级评估运算符在全局环境中更新变量。只要它是单个值,就可以正常工作。

    a <<- 3

但是我在数据框和数据表的子集上遇到错误,例如

    a <- c(1,2,3)
    a[3] <<- 4
    Error in a[3] <<- 4 : object 'a' not found 

有人知道为什么会这样以及如何解决吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

如果可能的话,应避免使用超级分配运算符和其他破坏范围的技术,尤其是因为这样会使代码不清晰,并使此类情况变得混乱。但是,如果确实需要为超出范围的变量分配值,则可以在eval内使用标准分配:

a <- c(1,2,3)

eval(a[3] <- 4, envir = -1)

a
[1] 1 2 4

要对此进行进一步概括(如果在函数内部执行分配),则可能仍需要在<<-内使用eval

尽管在范围之外更改变量仍然不是一个好主意,但是使用eval至少会使操作更加明确,因为必须指定要在其中计算表达式的环境。

总而言之,突破范围的分配本身从来都不是必需的,并且您也许应该找到一种方式来编写脚本,以使其不受依赖。