R 对两个矩阵的列应用函数

R 对两个矩阵的列应用函数,r,R,我有这两个矩阵,我想知道矩阵1的第1列的所有元素是否都是矩阵2的第1列的元素,依此类推。请注意,我没有使用is.element(),因为它在第4列中不起作用,在第4列中我可以容忍歧义(欢迎对此提出建议) 我是通过循环来实现的,但是如何使用apply函数来避免循环呢 dat1 = matrix(c("C", "T", "G", "G", "G", "G", "A", "A"), nrow=2, byrow=F) dat2 = matrix(c("T", "C", "G", "G", "G/A",

我有这两个矩阵,我想知道矩阵1的第1列的所有元素是否都是矩阵2的第1列的元素,依此类推。请注意,我没有使用is.element(),因为它在第4列中不起作用,在第4列中我可以容忍歧义(欢迎对此提出建议)

我是通过循环来实现的,但是如何使用apply函数来避免循环呢

dat1 = matrix(c("C", "T", "G", "G", "G", "G", "A", "A"), nrow=2, byrow=F)
dat2 = matrix(c("T", "C", "G", "G", "G/A", "G/A", "G", "A"), nrow=2, byrow=F)

我喜欢罗尔的解决方案。谢谢

vec = logical(ncol(dat1))   

for(i in 1:ncol(dat1)) {
    vec[i] = all(rowSums(sapply(dat1[,i], grepl, dat2[,i]))>0)
}

使用sappy替换(i…)部分的
:sappy(1:ncol(dat1),函数(i)all(行和(sappy(dat1[,i],grepl,dat2[,i]))>0))
考虑类似
setdiff(unique(dat1[,i]),unique(dat2[,i])
?如果您真的想用
*函数实现这一点,请应用
(这没有我能想到的优势)您可以转换为数据帧,然后使用
mappy
。您的
rowSums
应该是
colSums
。尝试将第二个
G/A
替换为
C
进行测试。
sapply(1:ncol(dat1), function(i) all(rowSums(sapply(dat1[,i], grepl, dat2[,i]))>0))