r - 返回到矩阵中的位置
问题描述
comN<-gtools::permutations(2,5,v=c(0,1),repeats=TRUE)
which(comN==c(0,0,0,0,1),arr.ind.col=T)
但它没有给我第 2 行
我想知道 c(0,0,0,0,1) 在位置 comN [2,]
解决方案
R的矩阵运算是按列顺序进行的,所以你指令中的比较是逐列which
比较向量,回收它。c(0,0,0,0,1)
看看这个简单的例子会发生什么。
m <- matrix(1:8, ncol = 2)
m
# [,1] [,2]
#[1,] 1 5
#[2,] 2 6
#[3,] 3 7
#[4,] 4 8
m == c(1, 5)
# [,1] [,2]
#[1,] TRUE FALSE
#[2,] FALSE FALSE
#[3,] FALSE FALSE
#[4,] FALSE FALSE
向量c(1, 5)
不与第一行比较,比较是
c(1, 2) == c(1, 5)
thenc(1, 5)
被回收并与第一列中的下一个值进行比较。因此,当它到达第二列时,该列中的第一个比较是
c(5, 6) == c(1, 5)
#[1] FALSE FALSE
归来c(FALSE, FALSE)
。
这就是为什么我需要在t()
下面的解决方案中进行转置。一种方法可能是
which(colSums(t(comN) == c(0,0,0,0,1)) == ncol(comN))
#[1] 2
或者
which(apply(t(comN) == c(0,0,0,0,1), 2, all))
该colSums
解决方案的速度提高了大约 3 倍。
推荐阅读
- apache-spark - Spark S3 空 uri 主机
- c# - 对应用程序用户的引用始终返回 null,即使包含在内
- java - TTS:如何将文本转换为 SSML?
- c# - 一种方法中的堆栈对象似乎与 UNITY 中的另一种方法不同?
- python - 生成的正弦波听起来嗡嗡声或“方波”而不是正弦波
- c# - 统一摧毁后如何重生坦克?(有几秒钟的延迟)
- reactjs - 根据反应中的逻辑用 span 或 div 标签包装组件
- javascript - 为什么 jQuery 在选择器中链接 .attr() 时只选择一个元素?
- snowflake-cloud-data-platform - 在 Snowsight 中执行多个查询
- java - 找不到 colorpicker-0.0.13.aar (com.github.QuadFlask:colorpicker:0.0.13)