【问题标题】:R function for doing all pairwise comparisons for two vectors用于对两个向量进行所有成对比较的 R 函数
【发布时间】:2013-03-15 17:03:14
【问题描述】:

我猜这已经存在于 R 中的某个地方,所以也许你可以指出它。

我有两个数值向量,A 和 B。

A <- c(1,2,3)
B <- c(2,3,4)

我正在寻找一个函数,它可以在 A 和 B 之间进行每个可能的比较,并返回这些比较的 T/F 向量。

所以在这种情况下,它会比较:1>2 然后 1>3 然后 1>4 然后 2,2 然后 2>3 然后 2>4 然后 3>2 然后 3>4 并返回:

FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE

如果它返回差异就可以了,因为它可以很容易地转换。

这样的功能是否已经存在?

【问题讨论】:

  • 严格来说,这不是 CV 的主题,而是 stackoverflow 的主题。如果你标记它,版主会帮你移到那里。

标签: r


【解决方案1】:

outer 可能是您想要的功能。但是,它返回一个矩阵,所以我们需要得到一个向量。这是多种方式中的一种:

 a <- 1:3
 b <- 2:4
 as.vector(outer(a,b,">"))
[1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE

(虽然这不是您指定的顺序;但是,它是一致的顺序)

还有:

 as.vector(t(outer(a,b,">")))
[1] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE

现在是差异:

> as.vector(outer(a,b,"-"))
[1] -1  0  1 -2 -1  0 -3 -2 -1

我发现outer 非常有用。我经常使用它。

【讨论】:

  • 与其使用c 来获得它的副作用,不如使用as.vector 来获得更易读的代码。
  • 我和自己讨论过哪个更好(并指出还有其他方法)——虽然我同意它更具可读性,但据我所见,人们更倾向于使用c,我认为出于这个原因可能会更好地理解它。相比之下,我看不到as.vector。我会改的。
猜你喜欢
  • 2021-12-08
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
相关资源
最近更新 更多