मुझे do.call
पसंद है। मुझे एक सूची में फ़ंक्शन तर्कों को संग्रहीत करने में सक्षम होना पसंद है और फिर उन्हें किसी दिए गए फ़ंक्शन में विभाजित करना पसंद है।बड़े डेटासेट के लिए do.call करने के लिए वैकल्पिक
उदाहरण के लिए, मैं अक्सर अपने आप को इस पद्धति का उपयोग कर विभिन्न पूर्वानुमान आधारित मॉडल की एक सूची फिट करने के लिए, के साथ कुछ साझा किया और एक मॉडल के लिए कुछ अद्वितीय पैरामीटर लगता है:
library(caret)
global_args <- list(
x=iris[,1:3],
y=iris[,4],
trControl=trainControl(
method='cv',
number=2,
returnResamp='final',
)
)
global_args$trControl$index <- createFolds(
global_args$y,
global_args$trControl$number
)
model_specific_args <- list(
'lm' = list(method='lm', tuneLength=1),
'nn' = list(method='nnet', tuneLength=3, trace=FALSE),
'gbm' = list(
method='gbm',
verbose=FALSE,
tuneGrid=expand.grid(
n.trees=1:100,
interaction.depth=c(2, 3),
shrinkage=c(.1, .01)
)
)
)
list_of_models <- lapply(model_specific_args, function(args){
return(do.call(train, c(global_args, args), quote=TRUE))
})
resamps <- resamples(list_of_models)
dotplot(resamps, metric='RMSE')
global_args
तर्क है कि सभी के लिए समान हैं शामिल मॉडल के, और model_specific_args
में मॉडल-विशिष्ट तर्कों की सूचियां शामिल हैं। मैं model_specific_args
पर लूप, global_args
के साथ प्रत्येक तत्व को संयोजित करता हूं, और फिर मॉडल फिटिंग फ़ंक्शन पर अंतिम तर्क सूची को पास करने के लिए do.call
का उपयोग करता हूं।
हालांकि यह कोड दृश्यमान रूप से सुरुचिपूर्ण है, इसका प्रदर्शन भयानक है: do.call
सचमुच पूरे एक्स डेटासेट को पाठ के रूप में क्रमबद्ध करता है और फिर इसे मॉडल फिटिंग फ़ंक्शन में भेज देता है। यदि एक्स कुछ जीबी डेटा है तो यह रैम की पागल राशि का उपयोग करता है और आमतौर पर विफल रहता है।
print(list_of_models[[1]]$call)
वहाँ do.call
या call
का उपयोग किए बिना किसी तरह से आर में एक समारोह के लिए तर्कों की सूची पारित करने के लिए है?
क्या आपने plyr पैकेज से rbind.fill की कोशिश की है। मैंने यह जानने के लिए कोड नहीं पढ़ा है कि अंतिम उत्पाद डेटा फ्रेम है, लेकिन यदि ऐसा है, तो rbind.fill बराबर do.call (rbind, ...) से काफी तेज़ है। अन्य मामलों में, मुझे भी कमी (।) – jimmyb
@jimmyb का उपयोग करके सफलता मिली है, मुझे नहीं लगता कि 'rbind.fill' या' Reduce' यहां उचित हैं। मैं 'data.frames 'को गठबंधन करने की कोशिश नहीं कर रहा हूं, मैं फ़ंक्शन में तर्कों की सूचियां पास करने का प्रयास कर रहा हूं। – Zach
क्या [यह] (http://stackoverflow.com/questions/13923301/is-there-a-work-around-for-slow-performance-of-do-callcbind-xts-in-r-2-15) मदद? – r2evans