Как функция colnames назначает новые имена столбцов? - PullRequest
3 голосов
/ 22 октября 2019

Я использовал эту функцию очень много раз, но только сейчас подумал: «Почему она работает?». Как функция 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>

Q: Я не вижу, как это назначает новые имена столбцов для фрейма данных.

1 Ответ

5 голосов
/ 22 октября 2019

colnames в левой части <- не является той же функцией, что и в правой части. Первая называется функцией замены, а ее имя colnames<-.

Отображение источника

Вы можете увидеть его код, набрав его на консоли R:

`colnames<-`

Отображаемый источник выглядит следующим образом:

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

, где первый аргумент 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

Подробнее

Здесь обсуждаются функции замены: Что такое функции замены в R?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...