R,

2012-05-18 29 views
9

Hızlı soru birleştir işlevinde atama kullanarak vektör öğelerinin adlarını ayarlayamaz. Neden (doğru vektör ilk elemana değişken değeri "Merhaba" atama) Ar aşağıdaki çalışma:R,

> a <- "Hello" 
> b <- c(a, "There") 
> b 
[1] "Hello" "There" 

Ve bu işleri:

> c <- c("Hello"=1, "There"=2) 
> c 
Hello There 
    1  2 

Ama bu (yapım gelmez eşit vektör elemanı adı "a" yerine) "Merhaba" den:

> c <- c(a=1, "There"=2) 
> c 
    a There 
    1  2 

o R ı açıklamada c <- c(a=1, "There"=2) bir değerini kullanmak istediklerini biliyoruz yapmak mümkün mü?

+2

Bir kenara: Ack! 'C() 'işlevini bir değişkenle maskeliyorsunuz! Tehlike! Tehlike, Will Robinson! – joran

+0

Yine tekrar. Yani bir 'c' değişkeni olmamalı mıyım? Sorumu değiştirmeyi düşündüm, ancak eğitim amaçlı olarak bırakacağım. –

+0

Bu felaket değil, ancak genel olarak değişkenler olarak ortak işlevlerden kaçınmalısınız. 'c()', 'data()' ve 't()', kullanıcıların kullanmaya çalıştıkları en yaygın olanlardır. – joran

cevap

8

c() içeriden, adlandırılmış nesnelerden ad niteliğini nasıl oluşturduğundan emin değilim. Belki de list() ve unlist() satırlarında mı? Her neyse, önce vektörün değerlerini ve daha sonra olduğu gibi adlar özelliğini atayabilirsiniz.

a <- "Hello" 
b <- c(1, 2) 
names(b) = c(a, "There") 
b 
# Hello There 
#  1  2 

Sonra sonra adlandırılmış öğelerine erişmek için:

b[a] <- 3 
b 
# Hello There 
#  3  2 
b["Hello"] <- 4 
b 
# Hello There 
#  4  2 
b[1] <- 5 
b 
# Hello There 
#  5  2 

Edit

Gerçekten aşağıdaki eserlerini tek satırda, içinde her şeyi isteseydi:

eval(parse(text = paste0("c(",a," = 1, 'there' = 2)"))) 
# Hello there 
# 1  2 

Ancak, değerleri ve isimleri atamayı tercih edeceğinizi düşünüyorum eval(parse()) yaklaşımına göre.

0

Değerleri adlandırılmış bir listeye atayın. Ardından liste dışı. Örneğin.

lR < -list ("a" = 1, "var" = 2)

v = Listede yer almayan (IR)

Bu adlandırılmış vektör V

v

a There 
1  2 
verir