如何使用 lapply 函数对 R 矩阵中的列进行逻辑运算?
How to use lapply functions for logical operations across columns in a matrix in R?
有没有办法在矩阵中使用 apply 来比较具有逻辑运算符的列之间的项目?
n.col <- 2
A <- matrix(sample(1:6, 1000*n.col, replace = TRUE), 1000 , ncol=n.col)
对于每一行,我想检查跨列的值是否相同。对于 n.col
的小值,我只是这样做:
A[ ,1] == A[ ,2]
但这对于大型 n.cols
来说非常笨重。我可以用循环做一些丑陋的事情,但我很想知道是否有某种方法可以为此使用 apply/lapply
。
您可以将 apply
用于矩阵的 rows/columns:
cols.equal <- apply(A, 1, function(x) length(unique(x)) == 1)
编辑:
如果您的应用程序涉及浮点数,length(unique(x))
将无法正常工作,因为数字将 "almost" 相同,但唯一元素的数量将大于 1。如果是这种情况,您可以将 apply
中的函数替换为
答案在这里:
Test for equality among all elements of a single vector
有没有办法在矩阵中使用 apply 来比较具有逻辑运算符的列之间的项目?
n.col <- 2
A <- matrix(sample(1:6, 1000*n.col, replace = TRUE), 1000 , ncol=n.col)
对于每一行,我想检查跨列的值是否相同。对于 n.col
的小值,我只是这样做:
A[ ,1] == A[ ,2]
但这对于大型 n.cols
来说非常笨重。我可以用循环做一些丑陋的事情,但我很想知道是否有某种方法可以为此使用 apply/lapply
。
您可以将 apply
用于矩阵的 rows/columns:
cols.equal <- apply(A, 1, function(x) length(unique(x)) == 1)
编辑:
如果您的应用程序涉及浮点数,length(unique(x))
将无法正常工作,因为数字将 "almost" 相同,但唯一元素的数量将大于 1。如果是这种情况,您可以将 apply
中的函数替换为
答案在这里:
Test for equality among all elements of a single vector