adding - title in ggplot2 r




В чем разница между именами и названиями (3)

Если вы посмотрите на начало colnames и colnames<- исходный код функции:

R> colnames
function (x, do.NULL = TRUE, prefix = "col") 
{
    if (is.data.frame(x) && do.NULL) 
        return(names(x))
(...)


R> `colnames<-`
function (x, value) 
{
    if (is.data.frame(x)) {
        names(x) <- value
    }
(...)

Вы можете видеть, что для фреймов данных colnames просто вызывают функцию names . Так что да, они строго эквивалентны.

Я просто хочу понять, есть ли разница между names и colnames при работе с data.frame . Кажется, что оба ведут себя одинаково. Могу ли я заменить друг друга?


Насколько мне известно, единственное различие между names() и colnames() отношению к входу data.frame состоит в том, что они выделяют память немного по-другому. Например, рассмотрим фрагмент кода ниже:

    df <- data.frame(x=1:5, y=6:10, z=11:15)
    tracemem(df)
    names(df) <- c("A", "B", "C")
    colnames(df) <- c('a','b','c') 

Если вы запустите этот код, вы увидите, что копирование df происходит только один раз во время вызова names() , тогда как копирование df происходит дважды во время colnames() .


names() colnames() атрибуты name, где colnames() просто называет столбцы.

т.е.

Создайте временную переменную.

> temp <- rbind(cbind(1,2,3,4,5),
+               cbind(6,7,8,9,10))

> temp
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    6    7    8    9   10

Создайте объект names.temp .

> names.temp <- temp

Используйте names() на names.temp

> names(names.temp) <- paste(c("First col", "Second col", "Third col",
 "Fourth Col", "Fifth col"))

> names.temp
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    6    7    8    9   10
attr(,"names")
 [1] "First col"  "Second col" "Third col"  "Fourth Col" "Fifth col"  
 NA NA NA          
 [9] NA NA      

Мы видим здесь, что мы можем вызвать 5-й атрибут name в names.temp .

> names(names.temp)[5]
[1] "Fifth col"    

Повторите со вторым объектом, но на этот раз создайте объект colnames.temp .

> colnames.temp <- temp

Используйте colnames() на colnames.temp

> colnames(colnames.temp) <- paste(c("First col", "Second col", "Third col",
 "Fourth Col", "Fifth col"))

> colnames.temp
     First col Second col Third col Fourth Col Fifth col
[1,]         1          2         3          4         5
[2,]         6          7         8          9        10

Теперь атрибут name имеет значение NULL.

> names(colnames.temp)[5]
NULL

В КОНЦЕ КОНЦОВ. Давайте посмотрим на нашу верную команду str() . Мы видим, что между names.temp и colnames.temp есть структурная разница . В частности, colnames.temp имеет атрибуты dimnames не атрибуты names .

> str(names.temp)
 num [1:2, 1:5] 1 6 2 7 3 8 4 9 5 10
 - attr(*, "names")= chr [1:10] "First col" "Second col" "Thrid col" "Fourth     
Col" ...
> str(colnames.temp)
 num [1:2, 1:5] 1 6 2 7 3 8 4 9 5 10
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:5] "First col" "Second col" "Thrid col" "Fourth Col" ...




r