【发布时间】:2020-05-24 11:06:04
【问题描述】:
我正在尝试使用“any”函数对维度可能不同的二维数组进行子集化,并在任何地方仅提取包含 3 的列。当 3 出现在多个列中时效果很好,但当只有 1(或 0)列包含 3 时会失败。这是我的 mwe:
critval <- 3
arr1 <- as.array (matrix (c (NA, NA, 8, NA, 2, 3, 3,
NA, 3, 8, NA, 2, 3, 3,
3, NA, 8, NA, 9, 5, 4,
8, 7, NA, 9, 5, 4, 2,
8, 5, 2, 9, 7, 5, 3), ncol = 5))
arr2 <- as.array (matrix (c (3, NA, 8, NA, 9, 5, 4,
8, 7, NA, 9, 5, 4, 2), ncol = 2))
new1 <- arr1 [ , apply(arr1, 2, function(x){any(x == critval, na.rm = TRUE)})]
(jamin1 <- apply(new1, 2, function (x) min(which(x == critval))))
[1] 6 2 1 7
这非常有效,正是我想要的,每列中第一个 3 实例的行索引,对于那些确实存在 3 的列。第一行代码删除任何不包含 3 的列。
new2 <- arr2 [ , apply(arr2, 2, function(x){any(x == critval, na.rm = TRUE)})]
(jamin2 <- apply(new2, 2, function (x) min(which(x == critval))))
Error in apply(new2, 2, function(x) min(which(x == critval))) :
dim(X) must have a positive length
但是,当我在较小的数组上尝试时,第一步中的 apply 函数无法正常工作,现在第二阶段抛出错误。我确信它可以做得更优雅,也许在一行中,只是试图看看它在做什么。我是否可以编写一个适用于所有情况的通用函数,即使没有一列包含 3?谢谢。 J
【问题讨论】: