l1 = factor(sample(letters,size=10,replace=TRUE))
l2 = factor(sample(letters,size=10,replace=TRUE))
l12 = factor(c(levels(l1)[l1],levels(l2)[l2]))
注意:字母为小写字母。
在上面的示例中,您能否解释一下(l1)[l1]是什么意思 和第3行中的(l2)[l2]。
我的样本和结果:
> l1
[1] y h f r x q y p d o
Levels: d f h o p q r x y
> l2
[1] n n v d s h k w y q
Levels: d h k n q s v w y
> l12
[1] y h f r x q y p d o n n v d s h k w y q
Levels: d f h k n o p q r s v w x y
答案 0 :(得分:0)
当名称后有一个开放的括号(
时,R会将括号内之前的内容视为函数,并将括号内 的内容传递给用作参数。
我从此开始,是因为对函数进行了高优先级评估,因此“ (l1)[l1]
的含义是什么” 是一个错误的问题,levels(l1)
首先发生,然后{ {1}}发生在[l1]
的结果上。
例如:
levels(l1)
在向量log(1:3)
上调用函数log()
。
1, 2, 3
在1、5、7上调用函数log(c(1, 5, 7))
以创建向量c()
,然后在向量1, 5, 7
上调用函数log()
。
1, 5, 7
先调用函数log(c(1, 5, 7))[2]
,然后再调用c()
,然后在结果上调用函数log()
,提取出[
的结果的第二个元素。
log()
factor( c( levels(l1)[l1], levels(l2)[l2] ) ) # some spaces added for clarity
对象上调用函数levels()
l1
中的值用[
子集化结果。l1
对象上调用函数levels()
l2
中的值用[
子集化结果。l2
,查看上述结果c()
的结果调用factor()
c()
在做什么?据我所知,这是获得与levels(l1)[l1]
相同结果的一种令人困惑的方法:
as.character(l1)
因此,总的来说,我认为set.seed(47) # for reproducibility
l1 = factor(sample(letters, size = 10, replace = TRUE))
l2 = factor(sample(letters, size = 10, replace = TRUE))
l1
# [1] z j t v o r k m o y
# Levels: j k m o r t v y z
levels(l1)
# [1] "j" "k" "m" "o" "r" "t" "v" "y" "z"
levels(l1)[l1]
# [1] "z" "j" "t" "v" "o" "r" "k" "m" "o" "y"
identical(as.character(l1), levels(l1)[l1])
# [1] TRUE
的目标是将向量factor(c(levels(l1)[l1], levels(l2)[l2]))
和l1
串联起来,并得到一个因子。我认为更清晰的方法是
l2