在名称<-()内创建对象会出错。怎么解释呢?
这
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
应该在 name<- 的父框架内求值。所以 y 应该在全局环境中创建。
谢谢。
[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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这与
<-
递归地转换 LHS 的方式有关,将"<-"
附加到函数名称以获取替换形式。第一个参数经过特殊处理。请注意最后两者之间的区别:对于您想要执行的操作,我无论如何都会使用
setNames
。This is related to the way that
<-
recursively transforms the LHS, appending"<-"
to the names of functions to get the replacement form. The first argument is treated specially. Note the difference between the last two:For what you're trying to do, I'd use
setNames
anyway.这可能是由于惰性评估造成的。当在一行中执行多个任务时,几乎无法保证事情将以什么顺序完成。显然,在这种情况下,它会在评估作业之前尝试找到 y。如果您只询问名称,则分配 y。
最好分两步完成这些类型的事情,这样您就可以放心,第一步在第二步需要结果之前完成。
This is probably due to lazy evaluation. There is little guarentee what order things will be done in when doing multiple tasks in one line. Apparently in this case it tries to find y before evaluating the assignment. If you just ask for the names, then y is assigned.
It is best to do these types of things in 2 steps so you can be assured that the first is done before the second needs the results.