Yeni öğeler eklemek için boş bir R vektörü nasıl oluşturulur


93

Rpy2 modülü tarafından sağlanan Python'da R kullanmak istiyorum. R'nin []belirli sütunları veya satırları çıkarabileceğiniz çok uygun işlemleri olduğunu fark ettim . Python betikleri ile böyle bir işlevi nasıl elde edebilirim?

Benim fikrim, bir R vektörü oluşturmak ve bu vektöre istenen elemanları eklemek, böylece son vektör R'deki ile seq()aynı olsun. istediğim şey olmayan 1 rakamıyla başlayın. Peki, bunu yapmanın daha iyi bir yolu var mı?

Yanıtlar:


96
vec <- vector()

Ayrıca vektör yardımına bakın

?vector

56

Bir vektörü önceden tahsis ediyorum

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

Daha sonra içine değer eklemek için [] tuşunu kullanabilirsiniz.


Bu, vektörün uzunluğu en baştan biliniyorsa en iyi cevaptır, çünkü bellek açısından en verimli olanı olacaktır
stevec

25

Bunun gibi boş bir vektör oluşturabilirsiniz

vec <- numeric(0)

Ve sonra c () kullanarak öğeler ekleyin

vec <- c(vec, 1:5)

Ancak romunov'un dediği gibi, bir vektörü önceden tahsis etmek ve sonra onu doldurmak çok daha iyidir (çünkü bu, her öğe eklediğinizde vektörünüzün yeni bir kopyasını yeniden tahsis etmeyi önler)


Numeric () ile çözümünüzü beğendim, ancak deneyimlerim beni 0 yerine NA kullanmaya yönlendirdi (sayısal (2) kullanırsanız, 0 0 alırsınız). Ama bu benim kişisel tercihim.
Roman Luštrik

Çok teşekkürler!! Ancak, yeni bir element eklendikten sonra öncekini serbest bırakmak mümkün müdür? rm () kullanmalı mıyım?
ligwin

Typeof (numeric (0)) "double" verirken, istenen elemanlar "integer" veriyor, eklendiğinde "Yeni değerin tipi farklı olamaz" diyen bir hata oluştu, nasıl dönüştürülür?
ligwin

python'da çalışırken, "as" bir anahtar kelimedir, ayrıca python bu tür veri türlerine sahip değildir, bu yüzden "as.integer" çalışmaz diye düşünüyorum.
ligwin

romunov - sayısal (0), 0 uzunluğunda bir sayısal vektör oluşturmak anlamına gelir (yani eleman yok), bu eleman 0 olan 1 uzunluğunda bir vektör değil
Aaron Statham

7

Boş bir vektör oluşturmak için şunları kullanın:

vec <- c();

Lütfen dikkat edin, ihtiyaç duyduğunuz vektör türü hakkında herhangi bir varsayımda bulunmuyorum, örneğin sayısal.

Vektör oluşturulduktan sonra, ona aşağıdaki gibi öğeler ekleyebilirsiniz:

Örneğin, 1 sayısal değerini eklemek için:

vec <- c(vec, 1);

veya "a" dize değeri eklemek için

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

4
Bunu gerçekten denedin mi? vec <- c()vec olarak ayarlar NULL. Eğer kullanmak istiyorsunuz boş bir vektör istiyorsanız vec <- character(), vec <- numeric()vb
Matthew Wise

5

Ben de gördüm

x <- {}

Artık herhangi bir boyuttaki vektörü bitiştirebilir veya bağlayabilirsiniz. x

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

2
Bu tamamen aynıdır x <- NULLve hiçbir yere gönderme yapmaktan başka bir şey yaratmaz.
Joris Meys

3

Brani'nin belirttiği gibi vektör () bir çözümdür, örneğin

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

ilk değerleri 50 "0" olan "newVector" adlı bir vektör döndürür. Ayrıca genişletilmiş bir vektöre ulaşmak için yeni skaleri mevcut bir vektöre eklemek oldukça yaygındır, örn.

aVector <- c(aVector, newScalar)


2

Rpy2'de, R ile "[" ile aynı operatörü elde etmenin yolu ".rx" kullanmaktır. Rpy2 ile ayıklama hakkındaki belgelere bakın

Vektör oluşturmak için, Python ile yolunuzu biliyorsanız, herhangi bir sorun olmamalıdır. Vektör oluşturmayla ilgili belgelere bakın


Bu amaç için python'da bir işlev oluşturuyordum, bu çok karmaşık ve ne kadar geniş bir alana uygulanabileceğinden emin değilim. Şimdi bu operatörlerle hayatın çok daha kolay olabileceğini düşünüyorum :)
ligwin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.