R भाषा में फ़ंक्शंस को परिभाषित करने के लिए एक निफ्टी फ़ीचर है जो एक चर संख्या में तर्क ले सकता है। उदाहरण के लिए, फ़ंक्शन data.frame
किसी भी तर्क को लेता है, और प्रत्येक तर्क परिणामी डेटा तालिका में एक स्तंभ के लिए डेटा बन जाता है। उदाहरण उपयोग:
> data.frame(letters=c("a", "b", "c"), numbers=c(1,2,3), notes=c("do", "re", "mi"))
letters numbers notes
1 a 1 do
2 b 2 re
3 c 3 mi
फ़ंक्शन के हस्ताक्षर में एक दीर्घवृत्त शामिल है, जैसे:
function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE,
stringsAsFactors = default.stringsAsFactors())
{
[FUNCTION DEFINITION HERE]
}
मैं एक फ़ंक्शन लिखना चाहता हूं जो कुछ समान करता है, कई मान ले रहा है और उन्हें एक ही रिटर्न वैल्यू में समेकित कर रहा है (साथ ही कुछ अन्य प्रसंस्करण कर रहा है)। ऐसा करने के लिए, मुझे यह पता लगाने की आवश्यकता है ...
कि फ़ंक्शन के भीतर फ़ंक्शन के तर्कों से "अनपैक" कैसे करें । मुझे नहीं पता कि यह कैसे करना है। फ़ंक्शन परिभाषा में संबंधित लाइन data.frame
है object <- as.list(substitute(list(...)))[-1L]
, जिसका मैं कोई मतलब नहीं बना सकता।
तो मैं फ़ंक्शन के हस्ताक्षर से दीर्घवृत्त को कैसे परिवर्तित कर सकता हूं, उदाहरण के लिए, एक सूची?
अधिक विशिष्ट होने के लिए, मैं get_list_from_ellipsis
नीचे दिए गए कोड में कैसे लिख सकता हूं ?
my_ellipsis_function(...) {
input_list <- get_list_from_ellipsis(...)
output_list <- lapply(X=input_list, FUN=do_something_interesting)
return(output_list)
}
my_ellipsis_function(a=1:10,b=11:20,c=21:30)
संपादित करें
ऐसा लगता है कि ऐसा करने के दो संभावित तरीके हैं। वे हैं as.list(substitute(list(...)))[-1L]
और list(...)
। हालाँकि, ये दोनों एक ही काम नहीं करते हैं। (अंतर के लिए, उत्तर में उदाहरण देखें।) क्या कोई मुझे बता सकता है कि उनके बीच व्यावहारिक अंतर क्या है, और मुझे कौन सा उपयोग करना चाहिए?
list
औरc
कार्य इस तरह से काम करते हैं, लेकिन दोनों ही आदिम हैं, इसलिए मैं आसानी से उनके स्रोत कोड का निरीक्षण नहीं कर सकता कि वे कैसे काम करते हैं।