मैं कुछ कस्टम श्रेणियां होती हैं, उदाहरण के लिए की सूची के लिए 'असूचीबद्ध' तरीके:आर - कस्टम कक्षाओं
setClass("foo", slots = c(mat = "matrix"))
मैं संभाल करने के लिए कैसे foo
वस्तुओं की एक सूची 'को असूचीबद्ध करें' कर रहे हैं चाहते हैं।
mat <- matrix(rnorm(16), 4)
foo <- new("foo", mat = mat)
unlist(list(foo))
मैं शायद c
के लिए तरीके (जो मैं इस्तेमाल किया गया था सोचा, लेकिन शायद गलत रूप से) और unlist
समस्या का समाधान होगा बनाने सोचा।
S3 संस्करण
#' @export
unlist <- function(x, ...) UseMethod("unlist", x)
#' @export
unlist.default <- base::unlist
#' @method unlist foo
#' @export
unlist.foo <- function(x, ...){
print("called foo unlist")
}
एस 4 संस्करण
#' @export
setMethod("unlist",
signature = "foo",
function(x, recursive = TRUE, use.names = TRUE){
print("call foo unlist")
})
c
समारोह
#' @export
setMethod("c",
signature = "foo",
function(x, ..., recursive = FALSE){
print("called foo c")
})
लेकिन जब मैं c
सीधे का उपयोग मैं केवल पुष्टिकरण संदेश दिखाई:
c(foo)
[1] "called foo c"
unlist
सिर्फ एक ही वस्तु कोई प्रिंट संदेश
unlist(list(foo))
[[1]]
An object of class "foo"
Slot "mat":
[,1] [,2] [,3] [,4]
[1,] 0.6711541 -0.2783441 -0.4707375 -0.23060105
[2,] 0.7408401 0.4076826 2.2757187 -0.48547413
[3,] 1.8640581 0.3610619 -0.4632473 -0.06498348
[4,] -0.5595930 0.6679157 -0.8142456 0.27499963
साथ अगर मैं फोन unlist(foo)
तो मैं प्रिंट संदेश मिलता है, लेकिन मैं foo
वस्तुओं की एक सूची पर इसे लागू करने की जरूरत है देता है। किसी सूची में कस्टम वर्गों के साथ मैं कैसे असूचीबद्ध कर सकता हूं इस पर कोई विचार?
अंत में मैं निम्नलिखित TRUE
लौटना चाहते:
all.equal(unlist(list(foo)), unlist(list(mat)))
'असूची 'एक एस 3 विधि की तरह नहीं दिखता है। यदि आप अपने फ़ंक्शन का उपयोग करना चाहते हैं, तो आपको सीधे 'unlist.foo' – Chrisss
@ क्रिज़ को कॉल करने की आवश्यकता है, हालांकि मैंने इसे S3 के रूप में निर्यात करने के लिए 'roxygen2' का उपयोग किया है, मैंने अब स्पष्ट रूप से' unlist' को S3 के रूप में तुरंत चालू कर दिया है। यह अभी भी एक ही समस्या में परिणाम। – cdeterman
'असूचीबद्ध।foo' S3 के लिए एक विधि होगी, जो किसी ऑब्जेक्ट पर लागू होगा जैसे 'foo <- struct (matrix (rnorm (16), 4), class = "foo")' लेकिन आपकी कक्षा S4 की तरह दिखती है यदि मैं हूं गलत नहीं – baptiste