R:将列表中的所有数字与其自身进行比较并返回一个 TRUE/FALSE 矩阵

Posted

技术标签:

【中文标题】R:将列表中的所有数字与其自身进行比较并返回一个 TRUE/FALSE 矩阵【英文标题】:R: Comparing all numbers in a list to themselves and return a matrix of TRUE/FALSE 【发布时间】:2018-06-29 22:04:39 【问题描述】:

大家好,我有数字向量x <- c(1,2,3,3)

我想将所有数字相互比较并返回一个 4 x 4 的 TRUE 和 FALSE 矩阵,指示它们是否相同。

尝试使用循环但没有成功:

matx <- matrix(FALSE,nrow=length(x),ncol=length(x))
for(i in nrow(matx)) 
  for (j in ncol(matx)) 
    matx[x==x[i],] <- TRUE
  

【问题讨论】:

向我们展示无效的循环 matx&lt;-matrix(FALSE,nrow=length(x),ncol=length(x)) for(i in nrow(matg1)) for (j in ncol(matx)) matg1[x==x[i],]&lt;-TRUE 对不起,我需要学习如何发布这些代码卡盘! 编辑问题并将其放入其中。 cmets 中的代码难以辨认 matxmatg1? Error in g1.new : object 'g1.new' not found 请修复您的代码示例。不要在没有测试的情况下发布损坏的代码。你是在抄别人的代码吗?你在抄袭作业吗? 【参考方案1】:

函数outer 就是您要找的。具体来说,

outer(x, x, `==`)

【讨论】:

【参考方案2】:

outer 显然是要走的路。但是如果你想使用循环,你需要正确定义你的迭代器:

x <- c(1,2,3,3)
N <- length(x)
comp = matrix(, nrow=N, ncol=N)

for(i in 1:N) 
    for(j in 1:N) 
        comp[i, j] = (x[i] == x[j])
    

comp

TRUE    FALSE   FALSE   FALSE
FALSE   TRUE    FALSE   FALSE
FALSE   FALSE   TRUE    FALSE
FALSE   FALSE   FALSE   TRUE

【讨论】:

以上是关于R:将列表中的所有数字与其自身进行比较并返回一个 TRUE/FALSE 矩阵的主要内容,如果未能解决你的问题,请参考以下文章

将字典的键与 List 的值进行比较,并返回所有匹配的值,包括重复值

如何递归地分割列表并比较相邻的值

与其使用 single() 返回表中的一项,如何返回与列表中相同 ID 绑定的多个项?

比较两个字母数字房间号码以确定楼层前缀

比较列表haskell中的所有元素[重复]

将一行中的项目与所有其他行进行比较,并使用 data.table - R 遍历所有行