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

jc5*_*766 3 r function variable-assignment

我已经使用此功能很多次了,但是直到现在我才想“为什么它起作用?”。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

Run Code Online (Sandbox Code Playgroud)

到目前为止,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>
Run Code Online (Sandbox Code Playgroud)

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

G. *_*eck 5

colnamesa左侧<-的功能与右侧不同。前者称为替换功能,名称为colnames<-

显示源

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

`colnames<-`
Run Code Online (Sandbox Code Playgroud)

所显示的源看起来像这样:

`colnames<-` <- function(x, value) { ...modify x...; x }
Run Code Online (Sandbox Code Playgroud)

其中第一个参数x指的是左手边的参数, value,第二个参数是指的右手边<-。它们都输入到替换功能,然后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
Run Code Online (Sandbox Code Playgroud)

更多信息

这里对替换函数进行了一些讨论:R中的替换函数是什么?