2010-08-05 21 views
77

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

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

उत्तर

43

मैं

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

के साथ एक वेक्टर पूर्व आवंटित फिर आप [] इसे में मूल्यों को सम्मिलित करने के लिए उपयोग कर सकते।

+7

आपको 'c()' की आवश्यकता नहीं है। 'एक <-rep (NA, 10) 'काम करता है। और कोई विशिष्ट प्रकार के 'एनए' का उपयोग कर वेक्टर की कक्षा को मजबूर कर सकता है, उदाहरण: 'rep (NA_integer_, 10)' (देखें 'सहायता ("एनए") ')। – Marek

+0

बेशक आप सी(), मेरे हिस्से पर एक वरिष्ठ पल छोड़ सकते हैं। अच्छी जानकारी मरेक, धन्यवाद। –

21

तुम इतनी

vec <- numeric(0) 

की तरह एक खाली वेक्टर बना सकते हैं और फिर() ग का उपयोग कर तत्वों

vec <- c(vec, 1:5) 

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

+0

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

+0

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

+0

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

87
vec <- vector() 

देखें भी मदद वेक्टर

?vector 
+3

यह उपयोग करने की सबसे अच्छी रणनीति है। – Kevin

+3

बिल्कुल सही जवाब, और यहां तक ​​कि बचे हुए इंडिस या NA को चारों ओर तैरने से त्रुटि का जोखिम भी कम हो सकता है! किसी भी मामले में, यह वही है जो मुझे चाहिए था। – Mnescat

+2

मैंने अभी देखा है कि मैं पहले से ही कुछ समय पहले यहां गया हूं और ऊपर उठाया गया हूं। खैर धन्यवाद फिर से ;-) – greg121

4

मैं भी

x <- {} 

देखा है अब आप जोड़ या x

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

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

1

rpy2 में करने के लिए किसी भी आयाम का एक वेक्टर बाध्य कर सकते हैं, जिस तरह से प्राप्त करने के लिए बहुत ही ऑपरेटर "[" आर के साथ ".rx" का उपयोग करना है। extracting with rpy2

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

+0

मैं इस उद्देश्य के लिए अजगर में एक फ़ंक्शन बनाना चाहता था, जो बहुत जटिल है और मुझे यकीन नहीं है कि यह कितनी व्यापक रूप से लागू हो सकता है। अब मुझे लगता है कि इस ऑपरेटरों के साथ, जीवन बहुत आसान हो सकता है :) – ligwin

2

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

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

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

vec <- c(); 

कृपया ध्यान दें, मैं वेक्टर के प्रकार आप की आवश्यकता है, उदा के बारे में कोई धारणा नहीं बना रहा हूँ:

aVector <- c(aVector, newScalar)

3

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

एक बार वेक्टर इस प्रकार आप इसे करने के तत्वों को जोड़ सकते हैं बना दिया गया है: एक स्ट्रिंग मान "एक" जोड़ने के लिए

vec <- c(vec, 1); 

या,:

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

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

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

संबंधित मुद्दे