colnames 函数如何分配新的列名?

Posted

技术标签:

【中文标题】colnames 函数如何分配新的列名?【英文标题】:How does colnames function assign new column names? 【发布时间】:2020-02-18 00:51:12 【问题描述】:

我已经多次使用此功能,但现在才想到“为什么它有效?”。 R 的 colnames() 函数如何为数据框分配新的列名? 我的意思是我知道 colnames(df) 将如何返回数据框的列名。但是它又怎么能分配新的呢?

aa <- mtcars
colnames(aa)
colnames(aa) <- LETTERS[1:ncol(aa)]
colnames(aa)
# ^ how can colnames function either return column names or assign new ones? It's just a function.

# but we can't change the number of columns this way:
ncol(aa)
ncol(aa) <- 10

目前 colnames 函数是:

function (x, do.NULL = TRUE, prefix = "col") 

    if (is.data.frame(x) && do.NULL) 
        return(names(x))
    dn <- dimnames(x)
    if (!is.null(dn[[2L]])) 
        dn[[2L]]
    else 
        nc <- NCOL(x)
        if (do.NULL) 
            NULL
        else if (nc > 0L) 
            paste0(prefix, seq_len(nc))
        else character()
    

<bytecode: 0x00000000091f1710>
<environment: namespace:base>

问: 我看不出这是如何为数据框分配新列名的。

【问题讨论】:

***.com/questions/10449366/… 【参考方案1】:

&lt;- 左侧的colnames 与右侧的功能不同。前者称为替换函数,其名称为colnames&lt;-

显示来源

您可以通过在 R 控制台输入以下代码来查看其代码:

`colnames<-`

显示的源码如下:

`colnames<-` <- function(x, value)  ...modify x...; x 

其中第一个参数x 指的是左侧的参数,第二个参数, value&lt;- 的右侧。它们都是替换函数的输入,然后 R 将运行替换函数的结果分配回x

替换函数的简单示例

例如,这里有一个简单的替换函数:

# define simple replacement function
`add_n<-` <- function(x, value) x + value  

# test
my_number <- 4
add_n(my_number) <- 3
my_number
## [1] 7

更多信息

这里有一些关于替换函数的讨论:What are Replacement Functions in R?

【讨论】:

以上是关于colnames 函数如何分配新的列名?的主要内容,如果未能解决你的问题,请参考以下文章

通过分配字符串向量创建具有列名的空数据框? [复制]

将向量中的值粘贴到 R 中的列名

在R中更改数据集的列名[重复]

更改 R 中的某些列名 [重复]

如何在sql服务中将列名分配给标量函数的返回值

循环遍历 R 中列名的特定子集