2011-03-25 9 views
6

से मैट्रिक्स कैसे बनाएं I ग्राफ़ बनाने के लिए डेटा.फ्रेम बनाने का प्रयास कर रहा हूं। मेरे पास एक फ़ंक्शन और दो वैक्टर हैं जिन्हें मैं दो इनपुट के रूप में उपयोग करना चाहता हूं। यह सरल है एक सा है, लेकिन मूल रूप से सभी मैं है:मैप्ली मूल बातें? - दो वैक्टरों और एक फ़ंक्शन

relGPA <- seq(-1.5,1.5,.2) 
avgGPA <- c(-2,0,2) 

f <- function(relGPA, avgGPA) 1/(1+exp(sum(relGPA*pred.model$coef[1],avgGPA*pred.model$coef[2]))) 

और सभी मैं चाहता हूँ, जिसके परिणामस्वरूप मूल्यों के साथ avgGPA मूल्यों के लिए 3 कॉलम, और relGPA मूल्यों के लिए 16 पंक्तियों के साथ एक data.frame है कोशिकाओं।

मैं क्षमा चाहता हूं कि यह कितना बुनियादी है, लेकिन मैं आपको आश्वस्त करता हूं कि मैंने आपकी सहायता के बिना ऐसा करने की कोशिश की है। मैंने sapply और mapply man पृष्ठों पर उदाहरणों का पालन करने का प्रयास किया है, लेकिन मैं यह देखने के लिए आर के लिए थोड़ा सा नया हूं कि मैं क्या करने की कोशिश कर रहा हूं।

धन्यवाद!

उत्तर

4

की पेशकश की जानकारी के साथ परीक्षण किया जा सकता है नहीं होगा, लेकिन यह काम करना चाहिए:

expGPA <- outer(relGPA, avgGPA, FUN=f) # See below for way to make this "work" 

एक और उपयोगी समारोह है जब आप संयोजन उत्पन्न करना चाहते expand.grid है और यह आप "लंबे समय से फार्म" मिलेगा:

expGPA2 <-expand.grid(relGPA, avgGPA) 
expGPA2$fn <- apply(expGPA2, 1, f) 

लंबे प्रारूप में जाली और ggplot उच्च स्तरीय साजिश के लिए इनपुट प्रारूप के रूप में अपेक्षा करेगा।

संपादित करें: Vectorize रणनीति के साथ सैम स्विफ्ट द्वारा डीजेहूरियो और (हल) द्वारा बताए गए फ़ंक्शन के कॉलम संदर्भों को पारित करने के लिए एक और विशिष्ट विधि बनाना आवश्यक हो सकता है। apply के मामले में, sum फ़ंक्शन ऊपर वर्णित बॉक्स से बाहर काम करेगा, लेकिन डिवीजन ऑपरेटर नहीं होगा, इसलिए यहां एक और उदाहरण है जिसे एकाधिक तर्कों के साथ अधिक जटिल कार्यों के लिए सामान्यीकृत किया जा सकता है।

> expGPA2$fn <- apply(expGPA2, 1, function(x) x[1]/x[2]) 
> str(expGPA2) 
'data.frame': 48 obs. of 3 variables: 
$ Var1: num -1.5 -1.3 -1.1 -0.9 -0.7 ... 
$ Var2: num -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 ... 
$ fn : num 0.75 0.65 0.55 0.45 0.35 ... 
- attr(*, "out.attrs")=List of 2 
    ..$ dim  : int 16 3 
    ..$ dimnames:List of 2 
    .. ..$ Var1: chr "Var1=-1.5" "Var1=-1.3" "Var1=-1.1" "Var1=-0.9" ... 
    .. ..$ Var2: chr "Var2=-2" "Var2= 0" "Var2= 2" 

EDIT2: एड "समारोह है, क्योंकि (दुर्भाग्य से) स्तंभ नाम के माध्यम से x तर्क को नहीं किया जाता है - सभी प्रोग्रामर की जरूरत है" लागू() "में उचित तर्क के लिए स्तंभ की संख्या है : (2013-01-05) एक साल बाद इस को देखते हुए, मुझे एहसास हुआ कि SamSwift के समारोह अपने शरीर उपयोग करके "+" के बजाय sum vectorized जा सकता है:

1/(1+exp(relGPA*pred.model$coef[1] + avgGPA*pred.model$coef[2]) # all vectorized fns 
+1

'f' करने के लिए एक vectorized समारोह होना चाहिए इसे 'बाहरी' में उपयोग करें। और 'लागू करें' इस तरह काम नहीं करता है। मेरा संपादन देखें। – djhurio

+1

धन्यवाद डीडब्ल्यूएन, जिसने चाल की है, और dhhurio आप ठीक हैं कुंआ। मैंने अपने कार्य को परिभाषित करने के बाद "vf <- Vectorize (f, SIMPLIFY = FALSE)" जोड़ा, और फिर बाहरी मुझे बिल्कुल वही था। –

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