2014-05-24 66 views
0
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) 

我有這兩個矩陣,我想知道,如果基質1第1欄的所有元素都是矩陣2的第1列的元素,依此類推每列。請注意,我沒有使用is.element(),因爲它在第4列的情況下不起作用,在第4列中我有一個容忍的含糊(有關這方面的建議很受歡迎)。應用功能在列兩個矩陣

我正在做一個循環,但如何避免循環使用應用函數?

vec = logical(ncol(dat1)) 

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

使用sapply更換'爲(I ...)'部分:'sapply(1:NcoI位(DAT1),功能(i)所有(rowSums(sapply(DAT1 [,I],grepl, (1),''))> 0))' – rawr

+0

考慮像'setdiff(unique(dat1 [,i]),unique(dat2 [,i]))''? –

+0

如果你真的想用'* apply'函數來做這件事(它不會提供我能想到的優點),你可以轉換爲數據框然後使用'mapply'。 –

回答

0

我喜歡rawr的解決方案。謝謝!

sapply(1:ncol(dat1), function(i) all(rowSums(sapply(dat1[,i], grepl, dat2[,i]))>0))