जबकि आर के ifelse
अविश्वसनीय रूप से आसान है, यह एक विशेष कमी है के लिए खोज रहे: कॉल ifelse(test, yes, no)
में yes
और no
के सभी तत्वों मूल्यांकन किया जाता है, यहां तक कि उन है कि दूर फेंक दिया जाएगा।एक अधिक कुशल ifelse()
यह नहीं बल्कि बेकार है आप एक जटिल संख्यात्मक व्यायाम के बीच में यह उपयोग कर रहे हैं, एक समारोह है कि integrate
, uniroot
, optim
या जो कुछ भी करने के लिए खिलाया जा जाएगा में कहते हैं। उदाहरण के लिए, एक
ifelse(test, f(x, y, z), g(a, b, c))
हो सकता है जहां f
और g
मनमाने ढंग से जटिल या धीमी गति से कार्य हैं, संभवतः अधिक नेस्टेड ifelse
के शामिल हैं।
क्या किसी ने ifelse
के लिए एक प्रतिस्थापन लिखा है जो केवल yes
/no
के तत्वों का मूल्यांकन करता है जो रखा जाएगा? असल में,
out <- test
for(i in seq_along(out))
{
if(test[i]) out[i] <- f(x[i], y[i], z[i])
else out[i] <- g(a[i], b[i], c[i])
}
की रेखाओं के साथ कुछ लेकिन स्पष्ट लूप की अड़चन/अक्षमता के बिना कुछ। आर के अंदरूनी भाग के बिना यह भी संभव है?
मुझे लगता है कि मैं * स्पष्ट लूप का उपयोग कर सकता हूं, लेकिन फिर मुझे लगता है कि मैं पुरानी कहानियों का पालन कर रहा हूं कि एक निर्धारित प्रोग्रामर किसी भी भाषा में फोरट्रान लिख सकता है .... –
आवेदन का उपयोग करने के बारे में कैसे? तो प्रत्येक तत्व के लिए ifelse() का मूल्यांकन किया जाता है, और इसी तरह 'हां' और 'नो को केवल प्रासंगिक तत्वों के लिए मूल्यांकन किया जाता है, जब तक कि मेरी समझ की समझ गलत न हो, लेकिन मुझे यकीन है कि पिछले – nzcoops
I में मेरे लिए काम किया गया है। अगर() - और, के साथ 'mapply' का उपयोग करने की कोशिश की, और वे vectorised 'ifelse' से 10 गुना धीमी थी! –