【问题标题】:how may I remove elements in a string vector by elements in another string vector [closed]如何通过另一个字符串向量中的元素删除字符串向量中的元素[关闭]
【发布时间】:2017-02-05 07:27:19
【问题描述】:
setdiff(c("a","c"),c("a","b","c","d"))
 #character(0)

这段代码应该返回一个c("b","d")的向量,有什么问题?

【问题讨论】:

  • 其他方式...setdiff(c("a","b","c","d"), c("a", "c"))

标签: r set-difference


【解决方案1】:

setdiff 是不对称的,正如帮助页面警告的那样(虽然很微妙)。

这如你所愿,

> setdiff(c("a","b","c","d"),c("a","c"))
[1] "b" "d"

一个简单的函数可以以任何方式工作,

setdiff2 <- function(x,y){
  d1 <- setdiff(x,y)
  d2 <- setdiff(y,x)
  if(length(d2) > length(d1))
    return(d2)
  else
    return(d1)
}

> setdiff2(c("a","c"), c("a","b","c","d"))
[1] "b" "d"

【讨论】:

  • setdiff2 对我来说看起来非常违反直觉,并且绝对不是对称的:setdiff2(c('a','b'),c('b','c')) 在交换参数时返回'a',即setdiff2(c('b','c'),c('a','b')),给我们'c'。跨度>
  • 是的,您是对的,这是一个非常幼稚的功能,仅在某些情况下直观,而在其他情况下则不然。我认为 setdiff 是不对称的,因为它应该是!
猜你喜欢
  • 2011-12-02
  • 2020-12-30
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-12
  • 2020-07-29
相关资源
最近更新 更多