2012-08-06 16 views
5

लंबी पोस्ट के लिए क्षमा! मैं आर के लिए नया हूं और भाषा के अपने आदेश को बेहतर बनाने के लिए कड़ी मेहनत कर रहा हूं। http://www1.maths.leeds.ac.uk/~voss/projects/2010-sports/JamesGardner.pdf* tmp * [[j]] में त्रुटि: सीमाओं से बाहर सदस्यता

मैं एक पूरा सीजन (पहले उल्लेख पेज 36, परिशिष्ट पेज 59) अनुकरण करने के लिए जब मैं कोड चलाने समस्याओं में चालू रखने के:: मैं मॉडलिंग फुटबॉल परिणामों पर इस दिलचस्प परियोजना भर में ठोकर खाई

Games <- function(parameters) 

{ 
teams <- rownames(parameters) 
P <- parameters$teams 
home <- parameters$home 
n <- length(teams) 
C <- data.frame() 
row <- 1 
for (i in 1:n) { 
    for (j in 1:n) { 
    if (i != j) { 
C[row,1] <- teams[i] 
C[row,2] <- teams[j] 
C[row,3] <- rpois(1, exp(P[i,]$Attack - P[j,]$Defence + home)) 
C[row,4] <- rpois(1, exp(P[j,]$Attack - P[i,]$Defence)) 
row <- row + 1 
    } 
    } 
} 
return(C) 
} 

Games(TeamParameters) 

प्रतिक्रिया मैं

Error in `*tmp*`[[j]] : subscript out of bounds 

है जब मैं एक ट्रैस बैक() प्रयास, यह मैं क्या मिलता है:

3: `[<-.data.frame`(`*tmp*`, row, 1, value = NULL) at #11 

2: `[<-`(`*tmp*`, row, 1, value = NULL) at #11 

1: Games(TeamParameters) 

मुझे वास्तव में समझ में नहीं आता कि त्रुटि का मतलब क्या है और मैं किसी भी मदद की सराहना करता हूं। एक बार फिर, लंबी पोस्ट के लिए क्षमा चाहते हैं लेकिन मुझे इस परियोजना में वास्तव में दिलचस्पी है और यह जानना अच्छा लगेगा कि समस्या क्या है!

उत्तर

4

डेटा.फ्रेम ऑब्जेक्ट्स [<-.data.frame ऑपरेशन के साथ पंक्ति द्वारा विस्तारित नहीं हैं। (आपको rbind का उपयोग करने की आवश्यकता होगी।) आपको उस ऑब्जेक्ट को बनाना चाहिए जिसमें पर्याप्त स्थान हो, या तो पूर्व-आयामी मैट्रिक्स या डेटा.फ्रेम हो। यदि "सी" 0 पंक्तियों का एक ऑब्जेक्ट है, तो पंक्ति को असाइन करने का प्रयास विफल हो जाएगा। "सी" नामक एक फ़ंक्शन है, इसलिए आप इसका नाम कुछ और विशिष्ट बनाना चाहते हैं। ऐसा लगता है कि डबल लूप की तुलना में अधिक कुशल तरीके हैं लेकिन आपने पैरामीटर ऑब्जेक्ट का बहुत अच्छा वर्णन नहीं किया है।

आप देख सकते हैं कि परिशिष्ट कि कागज के आप शो का हवाला दिया है कि कैसे एक dataframe को प्री-आयाम:

teams <- sort(unique(c(games[,1], games[,2])), decreasing = FALSE) 
T <- data.frame(Team=teams, ...) 

... और खेल-वस्तु मान लिया गया था पहले से ही पंक्तियों की उचित संख्या में और गणना के परिणाम नए कॉलम मान असाइन कर रहे थे। $<- ऑपरेशन सफल होगा यदि उस संदर्भित कॉलम के लिए कोई वर्तमान मान नहीं है।