【问题标题】:Comparing list elements in R比较 R 中的列表元素
【发布时间】:2016-06-08 18:53:45
【问题描述】:

我创建了两个列表,第一个名为 list1 的列表有 4 个包含 4 位的元素,第二个列表 2 包含 1 个 4 位的元素。我想比较列表,如果 list1 中的任何元素与 list2 中的唯一元素相同,那么我想从 list1 中删除该元素。我已经实现了以下代码,但没有得到正确的结果。

list1<-c()
n<-4
#Creating list1 with 4 vectors having 4 bits each
for(i in 1:5)
{
  rndno<-round(runif(1, 1, 2^n -1),0)
  bn<-bin(rndno)
  pad<-rep.int(0,n-length(bn))
  bn<-c(pad,bn)
  list1<-rbind(list1,bn)
}
list2<-c()
rndno<-round(runif(1, 1, 2^n -1),0)
bn<-bin(rndno)
pad<-rep.int(0,n-length(bn))
bn<-c(pad,bn)
list2<-rbind(list2,bn)
for(i in 1:nrow(k))
{
  if(list2[1,] == list2[i,])
  {
    print(i)
  }
}

请帮忙。

【问题讨论】:

    标签: r list compare


    【解决方案1】:

    问题是你没有在你的例子中定义bin函数,所以我们只能猜测你想要实现什么。但我认为你想做这样的事情:

    bin <- function(x) {
      i <- 0
      string <- numeric(32)
      while(x > 0) {
        string[32 - i] <- x %% 2
        x <- x %/% 2
        i <- i + 1 
      }
      first <- match(1, string)
      string[first:32] 
    }
    

    此函数将您的十进制数转换为二进制数。

    将随机数生成器设置为给定值也很有用 为了使您的脚本可重现:

    set.seed(1)
    

    现在,下面是您的代码,尽管它可能不是创建数据的最有效方式。另请注意,您命名了对象列表,但实际上,您在这里处理的是矩阵。

    list1<-c()
    n<-4
    #Creating list1 with 4 vectors having 4 bits each
    for(i in 1:5)
    {
      rndno<-round(runif(1, 1, 2^n -1),0)
      bn<- bin(rndno)
      pad<-rep.int(0,n-length(bn))
      bn<-c(pad,bn)
      list1<-rbind(list1,bn)
    }
    
    # [,1] [,2] [,3] [,4]
    # bn    0    1    0    1
    # bn    0    1    1    0
    # bn    1    0    0    1
    # bn    1    1    1    0
    # bn    0    1    0    0
    
    list2<-c()
    
    rndno<-round(runif(1, 1, 2^n -1),0)
    bn<-bin(rndno)
    pad<-rep.int(0,n-length(bn))
    bn<-c(pad,bn)
    list2<-rbind(list2,bn)
    
    # [,1] [,2] [,3] [,4]
    # bn    1    1    1    0
    

    现在,为了从list1 中删除list2 中指定的值,您将矩阵的行与目标向量进行比较,然后仅选择不完全匹配的行:

    list1[apply(apply(list1, 1, function(x) x == list2), 2, function(x) any(x == FALSE)),]
    
    # [,1] [,2] [,3] [,4]
    # bn    0    1    0    1
    # bn    0    1    1    0
    # bn    1    0    0    1
    # bn    0    1    0    0
    

    【讨论】:

    • 这个解决方案对您有用吗?我做对了 bin 函数应该做什么?如果没有,请通过编辑您的问题给出函数定义,我们可以再看一下。
    猜你喜欢
    • 1970-01-01
    • 2015-09-30
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 2020-09-20
    相关资源
    最近更新 更多