2012-07-18 10 views
18

Ho una funzione in cui definisco uno data.frame che utilizzo i loop per riempire con i dati. Ad un certo punto ricevo il messaggio di avviso:Cambia stringhe Impostazioni di AssFactors per data.frame

messaggi di avviso: 1: In [<-.factor (*tmp*, iseq, value = "CHANGE"): valido livello di fattore, AN generato

Pertanto, quando definisco il mio data.frame, mi piacerebbe impostare l'opzione stringsAsFactors su FALSE ma non capisco come farlo.

ho provato:

DataFrame = data.frame(stringsAsFactors=FALSE) 

e anche:

options(stringsAsFactors=FALSE) 

Qual è il modo corretto di impostare l'opzione stringsAsFactors?

+0

vedere http://stackoverflow.com/questions/2851015/r-convert-data-frame-columns-from-factors-to-characters – GSee

risposta

26

Dipende da come si riempie il frame di dati, per il quale non è stato fornito alcun codice. Quando si costruisce un nuovo frame di dati, si può fare t simili:

x <- data.frame(aName = aVector, bName = bVector, stringsAsFactors = FALSE) 

In questo caso, se esempio aVector è un vettore di caratteri, quindi la colonna di dataframe x$aName sarà anche un vettore di caratteri e non un fattore. Combinare questo con un frame di dati esistente (usando rbind, cbind o simile) dovrebbe mantenere quella modalità.

Quando si esegue

options(stringsAsFactors = FALSE) 

si modifica l'impostazione predefinita globale. Quindi ogni frame di dati che crei dopo l'esecuzione di quella linea non verrà convertito automaticamente in fattori a meno che non venga esplicitamente richiesto di farlo. Se devi solo evitare la conversione in un singolo luogo, preferirei non modificare l'impostazione predefinita. Tuttavia, se ciò influisce su molti punti del tuo codice, cambiare il valore predefinito sembra una buona idea.

Un'altra cosa: se il tuo vettore è già un fattore, allora nessuno dei due sopra lo cambierà in un vettore di caratteri. Per fare ciò, devi riconvertirlo in modo esplicito usando as.character o simili.

+0

Grazie per l '"altra cosa" sembra che il mio errore venga da quello. – VincentH