为什么当我给 R 中的两个列表元素命名时没有错误
Why there is no error when I give same name to two list elements in R
我在使用 R 进行一些实践时遇到了这个问题。这是场景,
v = list(bob=c(2,3,5),bob=c("aa","bb"))
我有一个名为 v
的列表,并且有两个列表元素都命名为 bob
。当我编译它时,它没有给出任何错误。但最有趣的因素是,如果我尝试使用 list name
打印 bob
,它会给我这个结果,
> v$bob
[1] 2 3 5
但是如果我使用 attach()
命令打印 bob
它 returns 另一种方式。
> attach(v)
> bob
[1] "aa" "bb"
> detach(v)
这两个不同的结果让我很好奇,请有人帮助理解下划线理论。
对于 attach
,它会覆盖第一个 'bob',即最后一个条目的 2、3、5。如果我们想反转它,使用 rev
它只是反转列表元素的顺序,因此列表的第一个元素现在将是最后一个
attach(rev(v))
-检查
> bob
[1] 2 3 5
一般来说,建议不要使用attach
。
如果我们想为特定元素创建对象,请使用 assign
assign(names(v)[1], v[[1]])
关于 why there is no error
in duplicate names of a list
的问题,list
有重名,matrix
也有重名。但是,在 data.frame
中,这是不允许的,因为有检查重复项的功能,即 make.unique
从而保证唯一的名称
make.unique(c('bob', 'bob'))
[1] "bob" "bob.1"
即如果我们将 list
转换为 data.frame(在校正 length
之后,即使 length
与 list
元素相同 - data.frame
是list
除了一些更多的属性外,其元素的长度相等)
data.frame(lapply(v, `length<-`, max(lengths(v))))
bob bob.1
1 2 aa
2 3 bb
3 5 <NA>
我在使用 R 进行一些实践时遇到了这个问题。这是场景,
v = list(bob=c(2,3,5),bob=c("aa","bb"))
我有一个名为 v
的列表,并且有两个列表元素都命名为 bob
。当我编译它时,它没有给出任何错误。但最有趣的因素是,如果我尝试使用 list name
打印 bob
,它会给我这个结果,
> v$bob
[1] 2 3 5
但是如果我使用 attach()
命令打印 bob
它 returns 另一种方式。
> attach(v)
> bob
[1] "aa" "bb"
> detach(v)
这两个不同的结果让我很好奇,请有人帮助理解下划线理论。
对于 attach
,它会覆盖第一个 'bob',即最后一个条目的 2、3、5。如果我们想反转它,使用 rev
它只是反转列表元素的顺序,因此列表的第一个元素现在将是最后一个
attach(rev(v))
-检查
> bob
[1] 2 3 5
一般来说,建议不要使用attach
。
如果我们想为特定元素创建对象,请使用 assign
assign(names(v)[1], v[[1]])
关于 why there is no error
in duplicate names of a list
的问题,list
有重名,matrix
也有重名。但是,在 data.frame
中,这是不允许的,因为有检查重复项的功能,即 make.unique
从而保证唯一的名称
make.unique(c('bob', 'bob'))
[1] "bob" "bob.1"
即如果我们将 list
转换为 data.frame(在校正 length
之后,即使 length
与 list
元素相同 - data.frame
是list
除了一些更多的属性外,其元素的长度相等)
data.frame(lapply(v, `length<-`, max(lengths(v))))
bob bob.1
1 2 aa
2 3 bb
3 5 <NA>