这个
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
答案 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。
最好分两步完成这些类型的事情,这样你就可以放心,第一步是在第二步需要结果之前完成的。