Ifelse 只返回列表的第一个元素

cho*_*rem 1 r

我有两个清单:

list1<- list(x=c(1,2,3),
         y=c(4,5,6))
list1

#$x
#[1] 1 2 3

#$y
#[1] 4 5 6

list2<- list(x=c(1,2,3),
         y=c(4,5,6),
         z=c(7,8,9))
list2

#$x
#[1] 1 2 3

#$y
#[1] 4 5 6

#$z
#[1] 7 8 9
Run Code Online (Sandbox Code Playgroud)

我正在尝试ifelse()根据列表的长度执行一个语句,如果第二个列表的长度高于第一个列表,则应返回第二个列表。但是,该ifelse()语句仅返回所需列表的第一个元素:

ifelse(length(list1)<length(list2),list2,list1)

# [[1]]
# [1] 1 2 3
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,如何让语句ifelse()返回整个列表?

Ron*_*hah 5

ifelse对于向量,使用if/else进行标量比较。

if(length(list1)<length(list2)) list2 else list1

#$x
#[1] 1 2 3

#$y
#[1] 4 5 6

#$z
#[1] 7 8 9
Run Code Online (Sandbox Code Playgroud)

ifelse返回与我们正在执行的测试长度相同的输出。length(length(list1)<length(list2))是 1,因此它的输出长度也是 1。