Nel processo di (principalmente) risposta alla domanda this, mi sono imbattuto in qualcosa che ritengo di dover già vedere prima. Diciamo che hai un elenco:Perché questo comportamento durante la forzatura di un elenco di caratteri tramite as.character()?
l <- list(a = 1:3, b = letters[1:3], c = runif(3))
Il tentativo di costringere l
a vari tipi restituisce un errore:
> as.numeric(l)
Error: (list) object cannot be coerced to type 'double'
> as.logical(l)
Error: (list) object cannot be coerced to type 'logical'
Comunque, sto apparentemente permesso di costringere un elenco a carattere, ho solo non mi aspettavo questo risultato:
> as.character(l)
[1] "1:3"
[2] "c(\"a\", \"b\", \"c\")"
[3] "c(0.874045701464638, 0.0843329173512757, 0.809434881201014)"
Anzi, se mi è permesso di costringere gli elenchi a carattere, avrei pensato che avrei visto un comportamento più simile a questo:
> as.character(unlist(l))
[1] "1" "2" "3" "a" "b"
[6] "c" "0.874045701464638" "0.0843329173512757" "0.809434881201014"
Nota che come ho specificato gli elementi della lista in origine influisce sull'uscita as.character
:
l <- list(a = c(1,2,3), b = letters[1:3], c = runif(3))
> as.character(l)
[1] "c(1, 2, 3)"
[2] "c(\"a\", \"b\", \"c\")"
[3] "c(0.344991483259946, 0.0492411875165999, 0.625746068544686)"
Ho due domande:
- Come si
as.character
rivangare le informazioni dal mio creazione originale della listal
per sputare1:3
versusc(1,2,3)
. - In quali circostanze, vorrei farlo esattamente? Quando dovrei chiamare
as.character()
in un elenco e ottenere l'output di questo modulo?
Aha,' deparse' sembra spiegare gran parte della mia prima domanda: – joran