r - 在 names<-() 中创建对象会出错。如何解释?

标签 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应该在 names<- 的父框架内进行评估。所以y应该在全局环境中创建。

谢谢。

[更新] 如果对象 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

最佳答案

这与<-的方式有关递归地转换 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无论如何。

关于r - 在 names<-() 中创建对象会出错。如何解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3943355/

相关文章:

c++ - 为什么 C 和 C++ 支持结构内数组的成员赋值,但通常不支持?

lisp - 将表达式的结果分配给变量

r - 比较字符串和数字

r - 按条件过滤 data.table,但每 N 行至少保留一行

c++ - 使用 Flex 和 Bison 在脚本引擎中实现 eval 和 load 函数

javascript - 为什么人们说 javascript eval() 是邪恶的,但您却没有反对 setTimeout 和 setInterval 等?

c - 合并排序在 C 与 O(N*log[N]) 运行时

r - 如果我手动更改 R Shiny 中的第一个 dateRangeInput,则无法更新第二个 dateRangeInput

r - 将列表复杂地重新排列为矩阵

javascript - 如何使调试器可以访问已评估的 javascript 代码?