【发布时间】:2020-02-22 01:12:33
【问题描述】:
setdiff() 要求其第一个向量参数比其第二个向量参数更长。为了克服这个限制,我总是尝试将两个参数中较长的放在第一位,较短的放在第二位。
which.max() 给出了较长参数的索引 (ind),但我想知道如何在不使用 which.min() 的情况下获得较短参数的 ind?
这是我正在做的事情:
a = c("bob", "jim", "jon")
b = c("bob", "jim", "jon", "al")
NAMES <- list(a, b)
ind <- which.max(sapply(NAMES, length)) # index for lengthier of `a` and `b`
setdiff(NAMES[[ind]], NAMES[[???]])#But what to put for ind of shorter arg: NAMES[[!ind]] fails
【问题讨论】:
-
如果长度相同怎么办?即
NAMES = list(a = c('a', 'b', 'c'), b = c('b', 'c', 'd')) -
which.max返回第一个最大元素的索引。因此,在我展示的示例中,它将是NAMES[['a']] -
我的问题是在这种情况下你想得到什么作为输出。如果您需要 'a' 作为输出,它会使用当前代码提供该输出
-
“setdiff() 要求它的第一个向量参数比它的第二个向量参数长”:这是错误的。你为什么这么认为?
-
@Reza 在这种情况下,创建一个条件
l1 <- lengths(NAMES); ind <- if(length(unique(i1))==1) 0 else which.max(l1)