在名称&lt ;-()内创建对象会产生错误。如何解释?

时间:2010-10-15 14:49:43

标签: r eval variable-assignment evaluation

这个

x <- list(12, 13)
names(y <- x) <- c("a", "b")

给出错误:

Error in names(y <- x) <- c("a", "b") : object 'y' not found

任何人都可以解释原因吗?

根据R的评估规则y <- x应在名称&lt; - 的父框架内进行评估。所以你应该在全球环境中创建。

感谢。

[update]如果对象y已存在于全局环境中,则错误为:

Error in names(y <- x) <- c("a", "b") : could not find function "<-<-"

[update2]这是我今天遇到的另一个构造。

(X <- matrix(0, nrow = 10, ncol = 10))[1:3] <- 3:5
Error during wrapup: object 'X' not found

2 个答案:

答案 0 :(得分:3)

这与<-递归转换LHS的方式有关,将"<-"附加到函数名称以获取替换表单。第一个参数是专门处理的。注意最后两个之间的区别:

x <- a <- 1
`f<-` <- function(x, a, value) x
f(x, a <- 2) <- 2
f(x <- 2, a) <- 2
# Error in f(x <- 2, a) <- 2 : could not find function "<-<-"

对于你想要做的事情,无论如何我都会使用setNames

答案 1 :(得分:1)

这可能是由于懒惰的评估。在一行中完成多项任务时,几乎没有什么可以做的事情。显然在这种情况下,它会在评估分配之前尝试找到y。如果您只是要求输入名称,则会分配y。

最好分两步完成这些类型的事情,这样你就可以放心,第一步是在第二步需要结果之前完成的。