2012-11-26 7 views
7

मेरे पास एक मैट्रिक्स है जो मैं आर में स्थानांतरित करने की कोशिश कर रहा हूं लेकिन टी() फ़ंक्शन सही उत्तर नहीं देता है। मैं मैट्रिक्स कैसे ट्रांसफर कर सकता हूं?यदि सामान्य `t()` काम नहीं करता है तो आर में एक मैट्रिक्स कैसे स्थानांतरित करें?

> xx=matrix(c(3,7,4,8),2,byrow=TRUE) 
> xx 
    [,1] [,2] 
[1,] 3  7 
[2,] 4  8 
> t(xx) 
[1] 0.7071068 0.7071068 
+10

क्या आपने अपने कार्यक्षेत्र में 't' फ़ंक्शन को फिर से परिभाषित किया है? – mnel

+0

यानी कुछ जैसे 't <- function (...) rep (sqrt (.5), 2) ' –

+0

इसी तरह से? http://stackoverflow.com/a/12019678 – GSee

उत्तर

12

यह उत्तर गलत है, लेकिन तरीके कि मेरे लिए शिक्षाप्रद थे और दूसरों के लिए हो सकता है में, तो मैं इसे छोड़ देंगे।

जैसा कि @mnel ने नोट किया है, बेस आर फ़ंक्शन t() उसी नाम के किसी अन्य फ़ंक्शन द्वारा मुखौटा होना चाहिए। फंक्शन t() को हटाने का प्रयास करें और t(xx) फिर से करें। मैं गारंटी देता हूं कि आपको सही परिणाम मिलेंगे।

जब आप इस चलाने आप क्या मिलता है:

rm(t) 
t(xx) 

हैं (! मेरी गारंटी के बावजूद) यह अभी भी काम नहीं करता है, तो आप पूरी तरह से आप इस तरह उपयोग करने के लिए, चाहते हैं t() के संस्करण निर्दिष्ट कर सकते हैं:

base::t(xx) 

यहाँ क्यों उपरोक्त दो सुझाव अपर्याप्त हैं

?UseMethod से:

नेमस्पेस सामान्य कार्यों के लिए तरीकों रजिस्टर कर सकते हैं। इस का समर्थन करने के लिए, 'UseMethod' और दो स्थानों पर तरीकों के लिए 'NextMethod' खोज: पर्यावरण के लिए वातावरण में सामान्य समारोह कहा जाता है में पहले, और तो पंजीकरण डेटा बेस में जो सामान्य में परिभाषित किया गया है (आमतौर पर एक नामस्थान)। तो सामान्य फ़ंक्शन के लिए विधियों को जेनेरिक के कॉल के माहौल में उपलब्ध होना आवश्यक है, या वे पंजीकृत होना चाहिए। (इससे कोई फर्क नहीं पड़ता कि वे वातावरण में सामान्य परिभाषित किया गया है में दिखाई दे रहे हैं।)

मैं गलत तरीके से मान लिया है कि एस 3 विधि प्रेषण t.default()पहलेbase:::.__S3MethodsTable__. में और तो शायद में की तरह तरीकों के लिए लग रहा है asNamespace("base") कॉलिंग पर्यावरण को देखते हुए, जबकि विपरीत सत्य के करीब है। GSee

से


संपादित करें यहाँ प्रदर्शित करने के लिए समस्या हो सकती थी क्या एक इंटरैक्टिव सत्र है।

> t <- function(x, ...) print("generic masked") 
> t.default <- function(x, ...) print("t.default masked") 
> t.matrix <- function(x, ...) print("t.matrix was used") 
> t.numeric <- function(x, ...) print("t.numeric was used") 
> xx=matrix(c(3,7,4,8),2,byrow=TRUE) 
> t(xx) 
[1] "generic masked" 
> base::t(xx) 
[1] "t.matrix was used" 
> rm(t.matrix) 
> base::t(xx) 
[1] "t.numeric was used" 
> rm(t.numeric) 
> base::t(xx) 
[1] "t.default masked" 
> rm(t.default) 
> base::t(xx) 
    [,1] [,2] 
[1,] 3 4 
[2,] 7 8 
+1

इससे मदद नहीं मिलती है। डिफ़ॉल्ट 'मास्क किया गया है ... या यदि कोई' t.matrix' विधि परिभाषित है। ;-) – GSee

+0

@ जीएसई - इसे मदद करनी चाहिए। 'बेस :: टी (एक्सएक्स) 'को पहले' asNamespace (" base ") 'में देखना चाहिए, जहां यह' t.default() 'मिलेगा, भले ही एक ही नाम का फ़ंक्शन कहीं और पंजीकृत हो, सही? –

+2

आपके globalenv() में परिभाषित संख्याओं का उपयोग पहले किया जाता है। – GSee

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