2012-05-18 20 views
9

Domanda veloce. Perché i seguenti lavori in R (assegnare correttamente il valore della variabile "Ciao" al primo elemento del vettore):In R, non è possibile impostare nomi di elementi vettoriali utilizzando l'assegnazione nella funzione di combinazione

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

E questo funziona:

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

Ma questo non significa (rendendo la vector nome di un elemento pari ad "a" piuttosto che "Ciao"):

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

E 'possibile fare R riconoscere che voglio usare il valore di un nell'istruzione c <- c(a=1, "There"=2)?

+2

A parte: Ack! Stai mascherando la funzione 'c()' con una variabile! Pericolo! Pericolo, Will Robinson! – joran

+0

Oops di nuovo. Quindi non dovrei nominare una variabile "c"? Ho pensato di modificare la mia domanda, ma la lascio a scopo didattico. –

+0

Non è catastrofico, ma in generale si dovrebbero evitare le funzioni comuni come variabili. 'c()', 'data()' e 't()' sono le più comuni che le persone cercano di usare. – joran

risposta

8

Non sono sicuro di come c() crei internamente l'attributo nomi dagli oggetti denominati. Forse è sulla falsariga di list() e unlist()? Ad ogni modo, è possibile assegnare prima i valori del vettore e successivamente l'attributo nomi, come nel seguito.

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

Quindi per accedere agli elementi chiamati in seguito:

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

Modifica

Se si voleva davvero fare tutto in una sola riga, le seguenti opere:

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

Tuttavia, penso che preferireste assegnare valori e nomi sep aronicamente all'approccio eval(parse()).

0

Assegnare i valori in una lista nominata. Quindi non elencarlo. per esempio.

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

v = non elencati (LR)

questo dà un nome vettore v

v

a There 
1  2 
Problemi correlati