水平下R编程中括号的含义

时间:2018-07-02 21:52:15

标签: r levels

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

1 个答案:

答案 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