2013-05-14 5 views
5

मैं एक आर नौसिखिया हूं और मैं एक प्रश्न बनाना चाहता हूं, हालांकि शीर्षक अन्य पोस्ट किए गए प्रश्नों के समान है, मुझे उनमें समाधान नहीं मिला।आर के साथ कई वैक्टरों के बीच सामान्य तत्व ढूंढें और एक फ़ंक्शन लागू करें

मेरा प्रश्न निम्न है: मेरे पास अलग-अलग लंबाई वाले कई वैक्टर हैं और मैं उन्हें एक जोड़ी तरीके से तुलना करना चाहता हूं और वेक्टरों के बीच सामान्य तत्वों के मूल्य को उत्पन्न करने के लिए प्रत्येक तुलना में एक फ़ंक्शन लागू करना चाहता हूं, उदाहरण के लिए 4 वैक्टर नाम ए, बी, सी, डी ए और बी, ए और सी, ए और डी, बी और सी, बी और डी, सी और डी

के बीच सामान्य तत्व ढूंढना चाहते हैं यहां एक और विस्तृत उदाहरण (केवल दो वैक्टर):

A=c("t","qt","er","oa","qra") 
B=c("t","ea","ew","ee","oa","qwt") 
length(which(A%in%B))/min(length(A),length(B)) #this is the function I would like to apply to each comparison. 
0.4 #value returned for the function 

मैं वैक्टर की एक बड़ी संख्या है और मैं कैसे आदेश जोड़ो में तुलना करने के लिए पाश के लिए एक को लागू करने के पता नहीं है।

अग्रिम में बहुत धन्यवाद

+0

अपने कार्य में तेजी लाने के लिए आप 'योग (% बी में एक%) का उपयोग कर सकते/मिनट (लंबाई (ए), लंबाई (बी)) ' – DrDom

उत्तर

4

आप outer

baseSet <- c('t','qt','er','oa','qra','ea','ew','ee','qwt') 
set.seed(0) 
A <- sample(baseSet, 5) 
B <- sample(baseSet, 5) 
C <- sample(baseSet, 5) 
D <- sample(baseSet, 5) 
dFun <- function(x,y){length(which(x%in%y))/min(length(x),length(y))} 

outer(list(A,B,C,D), list(A,B,C,D),Vectorize(dFun)) 
#  [,1] [,2] [,3] [,4] 
#[1,] 1.0 0.6 0.2 0.6 
#[2,] 0.6 1.0 0.4 0.6 
#[3,] 0.2 0.4 1.0 0.4 
#[4,] 0.6 0.6 0.4 1.0 

संपादित करें का उपयोग कर सकते हैं:

list.df <- list(A=A, B=B, C=C, D=D) 
outer(list.df, list.df, Vectorize(dFun)) 
# A B C D 
#A 1.0 0.6 0.2 0.6 
#B 0.6 1.0 0.4 0.6 
#C 0.2 0.4 1.0 0.4 
#D 0.6 0.6 0.4 1.0 
+1

'वेक्टरिज़' के लिए +1! –

+0

त्वरित उत्तर के लिए फिर से धन्यवाद, यह पूरी तरह से काम करता है। लेकिन, अगर मेरे पास list.df नामक सूची में मेरे सभी वैक्टर हैं, तो क्या मैं आवेदन कर सकता हूं: 'बाहरी (list.df, list.df, वेक्टरिज़ (डीएफयूएन)) ?? धन्यवाद फिर से – user2380782

+0

यह ठीक काम करना चाहिए – user1609452

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