2017-04-26 13 views
5

मान लीजिए कि मैं एक मैट्रिक्स की प्रत्येक पंक्ति में एक फ़ंक्शन लागू करना चाहता हूं। फ़ंक्शन के तर्कों में से एक वेक्टर लेता है।आर: वेक्टर के तत्वों के साथ मैट्रिक्स पर फ़ंक्शन लागू करें

set.seed(123) 
df<-matrix(runif(100), ncol=10) 

var2 <- c(1:10) 

MYFUNC <- function(x, Var=NA){ 
    sum(x)/Var 
} 

मैं इस कोशिश की:

apply(df, 1, function(x) MYFUNC(x, Var=var2)) 
मैं पहली पंक्ति, दूसरी पंक्ति के लिए दूसरा तत्व, आदि

उदाहरण के लिए करने के लिए वेक्टर के पहले तत्व लागू करना चाहते हैं

लेकिन यह मुझे प्रत्येक पंक्ति & वारा संयोजन पर लागू फ़ंक्शन के साथ 10x10 मैट्रिक्स देता है, जबकि मुझे केवल विकर्ण तत्वों में रूचि है। मैंने mapply फ़ंक्शन में भी देखा, लेकिन मुझे यकीन नहीं है कि इस मामले में इसे कैसे लागू किया जाए।

किसी भी मदद की वास्तव में सराहना की जाएगी।

उत्तर

5

Mapply साथ vectorized जा सकती है, निश्चित रूप से एक संभावना है। यह काम करना चाहिए:

mapply(MYFUNC, x = as.data.frame(t(df)), Var = var2) 

#V1  V2  V3  V4  V5  V6  V7  V8  V9  V10 
#5.0795111 2.8693537 1.8285747 1.3640238 0.8300597 0.6280441 0.7706310 0.6720132 0.5719003 0.4259674 

मुद्दा मुझे लगता है कि आप में चल रहे थे कि mapply या तो वैक्टर या सूचियों लेता है। आर matrices में सूचियां नहीं हैं, लेकिन data.frame एस हैं। आपको बस इतना करना है कि आप अपने मैट्रिक्स को ट्रांसफर करें और data.frame में कनवर्ट करें और फिर mapply को काम करना चाहिए। data.frame में प्रत्येक कॉलम सूची में एक तत्व है, इसलिए हमें इसे ट्रांसफर करना है (ताकि प्रत्येक row वेक्टर में प्रत्येक तत्व के लिए मैप किया जाएगा)।

2

के रूप में वहाँ दो तर्क है कि इसी पंक्तियों और मैट्रिक्स/वेक्टर में तत्वों क्रमशः पंक्तियों के अनुक्रम के माध्यम से लूप, हम कर सकते हैं होना चाहिए, डेटा सबसेट और के लिए समारोह

sapply(seq_len(nrow(df)), function(i) MYFUNC(df[i,], Var = var2[i])) 
#[1] 5.0795111 2.8693537 1.8285747 1.3640238 0.8300597 0.6280441 
#[7] 0.7706310 0.6720132 0.5719003 0.4259674 

लागू कर रहे हैं विशिष्ट उदाहरण है, यह rowSums

rowSums(df)/var2 
#[1] 5.0795111 2.8693537 1.8285747 1.3640238 0.8300597 0.6280441 
#[7] 0.7706310 0.6720132 0.5719003 0.4259674 
संबंधित मुद्दे