x=data.frame(name=c("n1","n2"),sex=c("F","M")) > colnames(x[1])="Name" > x -6ren">
gpt4 book ai didi

r - colnames(x[1])< -"name"和 colnames(x)[1]< -"name"有什么区别?

转载 作者:行者123 更新时间:2023-12-04 09:16:55 25 4
gpt4 key购买 nike

我想重命名 data.frame 中的列名,

> x=data.frame(name=c("n1","n2"),sex=c("F","M"))
> colnames(x[1])="Name"
> x
name sex
1 n1 F
2 n2 M
> colnames(x)[1]="Name"
> x
Name sex
1 n1 F
2 n2 M
>

为什么 colnames(x[1]) = "Name" 不起作用,而 colnames(x)[1]="Name" 却起作用?

这是什么原因?它们之间有什么区别?

最佳答案

信息过多的答案:如果您查看每个选项“脱糖”的目的:

# 1.
`[<-`(x, 1, value=`colnames<-`(x[1], 'Name'))
# 2.
`colnames<-`(x, `[<-`(colnames(x), 1, 'Name'))

第一个选项仅从第一列创建一个新的 data.frame,重命名该列(成功),然后尝试将该 data.frame 分配回第一列。 [<-.data.frame将传播值,但不会根据 value 的名称重命名现有列.

第二个选项获取 data.frame 的列名,更新第一个值,并使用更新后的名称创建一个新的 data.frame。


(在这里回答@Peng Peng 的问题,因为我不知道如何让反引号在评论中工作...)

反引号是引用变量名。考虑这里的区别:

x<-1
`x<-`<-1

第一个将 1 分配给名为 x 的变量,但第二个将其分配给名为 x<- 的变量.这些不常用的变量名实际上被 <- 使用了原始函数 - 您可以在赋值的 lhs 上进行任意函数调用,以及带有 <- 的函数附加在名称后面指定如何执行更新(类似于 lisp 中的 setf)。

关于r - colnames(x[1])< -"name"和 colnames(x)[1]< -"name"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11713769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com