微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

名称文档中的 z <- "names<-"(z, "[<-"(names(z), 3, "c2")) 行如何读取?

如何解决名称文档中的 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"))
  1. z:原始向量
  2. y = names(z):字符向量 - z 的名称。
  3. y[3]<-"c2":提取y的第三个元素并赋值为“c2”。现在我们在 "[<-"(names(z),"c2")
  4. 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 举报,一经查实,本站将立刻删除。