【问题标题】:r intersect two list elementwiser 与两个列表元素相交
【发布时间】:2013-08-27 16:35:51
【问题描述】:

我有两个整数向量列表,分别命名为GroundStates(长度=3)和naMat(长度=4)。 我想按元素相交列表,这意味着我希望GroundStates 中的每个向量与naMat 中的每个向量相交。

我尝试使用嵌套的lapply()

GS_conut_EP<-lapply(1:3, function(i) intersect((GroundStates[i]),lapply(1:4,function(x) as.integer(unlist(naMat[x])))))

这产生了一个长度为 3 的列表,但所有三个元素都是空的。

我也尝试过使用Reduce()

GS_conut_EP<-Reduce(intersect, c(GroundStates,naMat))

这也产生了一个空向量。

我确实知道列表之间存在相交,因为我尝试在每个列表中的一个向量上调用 unlist() 并将它们相交。

当然,我总是可以使用 for 循环,但我想知道是否有更优雅的方式来做到这一点?

【问题讨论】:

  • 你的意思是像intersect(unlist(GroundStates), unlist(naMat))这样的东西吗?
  • 你能发布一个示例数据集吗?看起来你确实让这件事变得比它需要的更复杂。

标签: r lapply


【解决方案1】:

如果您希望将输出作为列表列表,您可以执行以下操作:

lapply(GroundStates, function(x) lapply(naMat, function(y) intersect(x,y)))

【讨论】:

  • @user1614062 请注意,这将有“重复”,即设置L[[i]][[j]]L[[j]][[i]](其中L &lt;- lapply(...))将是相同的。如果这是一个问题,请告诉我,我会发布修复。
  • @Ferdinand.kraft 谢谢你告诉我这个。虽然我在输出中没有看到重复
  • @user1614062 它们可能出现故障,但它们会在那里,因为 intersect(x,y)intersect(y,x) 返回相同的集合。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
  • 2011-09-02
  • 2012-01-18
  • 1970-01-01
相关资源
最近更新 更多