नई वस्तुओं को जोड़ने के लिए एक खाली आर वेक्टर कैसे बनाएं


92

मैं आर का उपयोग पायथन में करना चाहता हूं, जैसा कि मॉड्यूल Rpy2 द्वारा प्रदान किया गया है। मुझे लगता है कि आर के पास बहुत सुविधाजनक []संचालन है जिसके द्वारा आप विशिष्ट कॉलम या लाइनों को निकाल सकते हैं। मैं पायथन लिपियों द्वारा इस तरह के एक समारोह को कैसे प्राप्त कर सकता हूं?

मेरा विचार एक आर वेक्टर बनाने और उन वेक्टर तत्वों को इस वेक्टर में जोड़ने का है ताकि अंतिम वेक्टर आर के समान हो। मैंने एक बनाया seq(), लेकिन ऐसा लगता है कि इसका प्रारंभिक अंक 1 है, इसलिए अंतिम परिणाम हमेशा होगा अंक 1 से शुरू करें, जो मुझे नहीं चाहिए। तो, क्या ऐसा करने का एक बेहतर तरीका है?

जवाबों:


95
vec <- vector()

वेक्टर सहायता भी देखें

?vector

56

मैं एक वेक्टर के साथ पूर्व-आवंटित करता हूं

> (a <- rep(NA, 10))
 [1] NA NA NA NA NA NA NA NA NA NA

फिर आप इसमें मान डालने के लिए [] का उपयोग कर सकते हैं।


यह सबसे अच्छा उत्तर है यदि वेक्टर की लंबाई को शुरू से ही जाना जाता है, क्योंकि यह सबसे अधिक स्मृति कुशल होगा
18:56

25

आप एक खाली वेक्टर बना सकते हैं जैसे

vec <- numeric(0)

और फिर c () का उपयोग करके तत्व जोड़ें

vec <- c(vec, 1:5)

हालाँकि जैसा कि रोमुनोव कहते हैं, वेक्टर को पूर्व-आवंटित करना और फिर उसे पॉप्युलेट करना बेहतर है (जैसा कि आप तत्वों को जोड़ने पर हर बार अपने वेक्टर की एक नई प्रतिलिपि प्राप्त करने से बचते हैं)


मुझे संख्यात्मक () के साथ आपका समाधान पसंद है, लेकिन मेरे अनुभव ने मुझे 0 के बजाय NA का उपयोग करने के लिए प्रेरित किया है (यदि आप संख्यात्मक (2) का उपयोग करते हैं, तो आपको 0 0 मिलेगा)। लेकिन यह मेरी निजी प्राथमिकता है।
रोमन लुसट्रिक

बहुत धन्यवाद!! लेकिन क्या एक नए तत्व के जुड़ने के बाद पिछले को मुक्त करना संभव है? क्या मुझे केवल rm () का उपयोग करना चाहिए?
ligwin

एक और समस्या है कि टाइपोफ़ (संख्यात्मक (0)) "डबल" देता है जबकि वांछित तत्व "पूर्णांक" देता है, जब जोड़ा जाता है, तो एक त्रुटि यह कहते हुए उठाई गई थी कि "नए मान के लिए प्रकार भिन्न नहीं हो सकता", कैसे कन्वर्ट करें?
ligwin

अजगर में काम करते समय, "as" एक कीवर्ड है, इसके अलावा, अजगर के पास ऐसे डेटा प्रकार नहीं हैं, इसलिए मुझे लगता है कि "as.integer" काम नहीं करेगा?
ligwin

रोमुनोव - न्यूमेरिक (0) का मतलब है न्यूमेरिक वेक्टर बनाना जिसकी लंबाई 0 है (यानी कोई तत्व नहीं) लंबाई का वेक्टर नहीं है जिसका तत्व 0 है
आरोन स्टैथम

6

एक खाली वेक्टर उपयोग बनाने के लिए:

vec <- c();

कृपया ध्यान दें, मैं आपके लिए आवश्यक वेक्टर के प्रकार, जैसे संख्यात्मक के बारे में कोई धारणा नहीं बना रहा हूं।

वेक्टर बन जाने के बाद आप उसमें निम्नानुसार तत्व जोड़ सकते हैं:

उदाहरण के लिए, संख्यात्मक मान 1 जोड़ने के लिए:

vec <- c(vec, 1);

या, एक स्ट्रिंग मान जोड़ने के लिए "a"

vec <- c(vec, "a");

4
क्या आपने वास्तव में यह कोशिश की है? vec <- c()को सेट करता है NULL। यदि आप एक खाली वेक्टर चाहते हैं जिसका आप उपयोग करेंगे vec <- character(), vec <- numeric()आदि
मैथ्यू समझदार

5

मैंने भी देखा है

x <- {}

अब आप किसी भी आयाम के वेक्टर को संक्षिप्त या बाँध सकते हैं x

rbind(x, 1:10)
cbind(x, 1:10)
c(x, 10)

2
यह बिल्कुल वैसा ही है x <- NULL, और कहीं और के संदर्भ के अलावा और कुछ नहीं बनाता है।
जॉरिस मेस

3

जैसा कि ब्रानी द्वारा बताया गया है, वेक्टर () एक समाधान है, उदा

newVector <- vector(mode = "numeric", length = 50)

प्रारंभिक मानों के रूप में 50 "0" के साथ "newVector" नामक एक वेक्टर लौटाएगा। यह भी एक विस्तारित सदिश पर पहुंचने के लिए एक मौजूदा वेक्टर में नए स्केलर को जोड़ने के लिए काफी सामान्य है, उदा

aVector <- c(aVector, newScalar)


2

Rpy2 में, आर के साथ "[" के रूप में बहुत ही ऑपरेटर प्राप्त करने का तरीका ".rx" का उपयोग करना है। Rpy2 के साथ निकालने के बारे में प्रलेखन देखें

वैक्टर बनाने के लिए, यदि आप अजगर के साथ अपना रास्ता जानते हैं तो कोई समस्या नहीं होनी चाहिए। वैक्टर बनाने के बारे में दस्तावेज देखें


मैंने इस उद्देश्य के लिए अजगर में एक समारोह बनाया, जो बहुत जटिल है और मुझे यकीन नहीं है कि यह व्यापक रूप से कैसे लागू हो सकता है। अब मुझे लगता है कि इस ऑपरेटर के साथ, जीवन बहुत आसान हो सकता है :)
ligwin
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.