如何解决名称文档中的 z <- "names<-"(z, "[<-"(names(z), 3, "c2")) 行如何读取?
参考这个例子:
z <- list(a = 1,b = "c",c = 1:3)
names(z)
# change just the name of the third element.
names(z)[3] <- "c2"
z
names documentation 表示“查看示例。这是有效的,因为那里的表达式被评估为 z "
这最后一行代码是关于什么的?它不匹配我熟悉的 R 语法,所以我什至无法理解如何阅读它。如果有的话,它似乎比它试图解释的例子更复杂。我如何阅读?
解决方法
那部分文档确实写得不好,我不怪你弄糊涂了。
这是简短的回答,假设您有一个向量 z = c(a = 1,b = 2,c = 3)
,那么以下内容是等价的:
names(z)[3] <- "c2"
和
z <- "names<-"(z,"[<-"(names(z),3,"c2"))
这就是文档的全部内容。
这是更长的答案:在 R 中,您可能熟悉函数的基本语法,因此假设您有 foo = function(x,y) x + y
,那么您可能习惯于调用 foo(1,2)
。您可能还见过“中缀”运算符,例如 +
,因此您可能熟悉 1 + 2
。然而在内部这实际上被读作 "+"(1,2)
(试试这个它会工作)。赋值和提取函数也有类似的情况,例如 x[1]
(对于某些向量 x
)或本例中的 names(z)[3] <-
,其中 <-
是赋值运算符。>
为了使这个例子更加复杂,实际上使用了两个独立的中缀运算符!有 names<-
和 [<-
,第一个用于设置向量的名称,第二个用于在首先提取向量后设置向量中的值(我知道有一个这里发生了很多事情)。
因此分解该行在更熟悉的 R 代码中说明的内容:
z <- "names<-"(z,"c2"))
-
z
:原始向量 -
y = names(z)
:字符向量 - z 的名称。 -
y[3]<-"c2"
:提取y
的第三个元素并赋值为“c2”。现在我们在"[<-"(names(z),"c2")
。 -
names(z)<-y
:将z
的名称设置为y。现在我们在"names<-"(z,"c2"))
。
为了让事情更加混乱,"names<-"
不保存新命名的向量,它只是设置新名称。这就是为什么最后需要 z <- "names<-"...
用新命名的变量覆盖原始变量的原因。
并用 R 代码显示:
> z = c(a = 1,c = 3)
> print(z)
a b c
1 2 3
> names = names(z)
> names[3] = "c2"
> names(z) = names
> print(z)
a b c2
1 2 3
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。