2015-06-19 5 views
5

में सहायता करें तो मेरे पास दो अलग मैट्रिक्स (mat1 और mat2) हैं और मुझे चेक करने के लिए उनके माध्यम से जाना होगा। मुझे परिणामों को एक तीसरे मैट्रिक्स में स्टोर करने की आवश्यकता है।आर - लूप का उपयोग किये बिना विभिन्न matrices के माध्यम से लूप! बस एक कोड

मुझे लगता है कि मेरा कोड उद्देश्य के लिए बहुत लंबा है।

मैं लूपिंग से बचने के लिए आपके कुछ सुझाव चाहता था।

तो मेरी पहली मैट्रिक्स इस (अंत में dput) की तरह लग रहा

wit5.001 wit5.002 wit5.003 wit5.004 wit5.005 wit5.006 wit5.007 wit5.008 wit5.009 wit5.010 
[1,]  1  1  1  1  1  1  1   1  1  1 
[2,]  1  1  1  1  1  1  1  1  1  1 
[3,]  1  1  1  1  1  1  1  1  1  1 
[4,]  1  1  1  1  1  1  1  1  1  1 
[5,]  1  1  1  1  1  1  1  0  1  1 
[6,]  1  1  1  1  1  1  1  0  0  0 
[7,]  0  1  1  1  1  1  1  1  1  1 
[8,]  1  1  1  1  1  1  1  1  1  1 
[9,]  1  1  1  1  1  1  1  1  1  1 
[10,]  1  1  1  1  1  1  1  1  1  1 

मेरी दूसरी मैट्रिक्स एक समान संरचना है।

यहां मैं अपना तीसरा मैट्रिक्स बना रहा हूं - जांच के परिणामों को संग्रहीत करने के लिए।

matCheck <- matrix('ok', ncol = ncol(mat1), nrow = nrow(mat1)) 

यहाँ मेरी पाश है - कि मैं

for(j in 1:ncol(mat1)){ 
    for(i in 1:nrow(mat1)){ 

    if(mat1[i,j] == 1 & mat2[i,j] == 1) 
    {matCheck[i,j] <- 'ok'} 

    if(mat1[i,j] != 1 & mat2[i,j] == 1) 
    {matCheck[i,j] <- '!'} 

     } 
    } 

से बचने के लिए जांच

 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
[1,] "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" 
[2,] "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" 
[3,] "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" 
[4,] "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" 
[5,] "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" 
[6,] "ok" "ok" "ok" "ok" "ok" "ok" "ok" "!" "!" "ok" 
[7,] "!" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" 
[8,] "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" 
[9,] "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" 
[10,] "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" "ok" 

कोई सुझाव का परिणाम चाहते हैं?

यहाँ मैट्रिक्स 1

mat1 = structure(c(1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1), .Dim = c(10L, 
10L), .Dimnames = list(NULL, c("wit5.001", "wit5.002", "wit5.003", 
"wit5.004", "wit5.005", "wit5.006", "wit5.007", "wit5.008", "wit5.009", 
"wit5.010"))) 

है यहाँ मैट्रिक्स 2

mat2 = structure(c(1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 
1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 
1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 
0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 
0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0), .Dim = c(10L, 
10L), .Dimnames = list(NULL, c("wit5.020", "wit5.021", "wit5.022", 
"wit5.023", "wit5.024", "wit5.025", "wit5.026", "wit5.027", "wit5.028", 
"wit5.029"))) 
+0

@ फ्रैंक - क्षमा करें मेरी गलती - आप सही हैं, वे अलग-अलग आयाम नहीं मानते हैं (मैंने अपने सबसेट में गलती की है)। मैंने कोड को सही किया। – giacomo

+0

मैं आपके प्रस्तावों का प्रयास करने जा रहा हूं दोस्तों – giacomo

+0

यह इतना आसान है! ओह नहीं ... मेरे लूप में डालने के सभी प्रयासों के बाद;) धन्यवाद @ फ्रैंक - इसे तब उत्तर के रूप में रखें – giacomo

उत्तर

4

उदाहरण के लिए दिया जाता है, परिणाम निर्माण किया जा सकता है के रूप में

matCheck <- (mat1 | !mat2) 

यह matCheck आरंभ के बराबर है सच में और फिर झूठी भरना जहां !mat1 & mat2 (ओपी के रूप में पाश)। कोष्ठक वैकल्पिक हैं, लेकिन इसे पढ़ने में आसान बनाते हैं (मुझे लगता है)।

संबंधित मुद्दे