名称和姓氏之间有什么区别

Man*_*u H 23 r

我只是想知道如果有之间的差异names,并colnames与工作时data.frame.两者似乎都表现得一样.我可以替换另一个吗?

Ste*_*e S 21

它们对于data.frames是否相同?

它们一般是一样的吗?不完全 - 最大的区别是colnames也适用于矩阵,而名称不适用(只是数据帧).

此外,您可以使用名称来设置/获取向量的名称(并且,由于显而易见的原因,您无法使用colnames执行此操作 - 结果为NULL以获取和设置错误).

  • 回复:“名称”和矩阵-这是一个“工作”的松散概念……不过,要指出的是。 (2认同)
  • @AurélienGasser,您是对的:我什至不确定自己为什么会认为当时如此明显……但是要回答您的问题,**名称**仅适用于至少具有两个的矩阵状对象尺寸(因为它必须具有行*和*列),因此,它不适用于矢量(因为它们没有列(甚至没有'dim'属性))。 (2认同)

jub*_*uba 9

如果你看一下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
    }
(...)
Run Code Online (Sandbox Code Playgroud)

您可以看到,对于数据框,colnames只需调用该names函数即可.所以是的,它们完全相同.


小智 6

names()创建名称属性,只需colnames()命名列即可。

IE

创建一个临时变量。

> 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
Run Code Online (Sandbox Code Playgroud)

创建names.temp对象。

> names.temp <- temp
Run Code Online (Sandbox Code Playgroud)

使用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      
Run Code Online (Sandbox Code Playgroud)

我们在这里看到我们实际上可以调用 中的第五个名称属性names.temp

> names(names.temp)[5]
[1] "Fifth col"    
Run Code Online (Sandbox Code Playgroud)

对第二个对象重复此操作,但这次创建该colnames.temp对象。

> colnames.temp <- temp
Run Code Online (Sandbox Code Playgroud)

使用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
Run Code Online (Sandbox Code Playgroud)

现在 name 属性为 NULL。

> names(colnames.temp)[5]
NULL
Run Code Online (Sandbox Code Playgroud)

最后。让我们看看我们值得信赖的str()命令。我们可以看到和之间存在结构性差异。具体来说,有属性而不是属性。names.tempcolnames.tempcolnames.tempdimnamesnames

> 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" ...
Run Code Online (Sandbox Code Playgroud)

  • 第一个答案很好,但是 `names()` 不会创建名称。`names&lt;-` 确实如此。这是一个不同的功能。 (2认同)