2013-03-02 14 views
9

Buon pomeriggio,Restituisce il carattere associato al codice Ascii specificato nella R

Sto cercando di creare un prodotto cartesiano in R con le lettere dell'alfabeto.

Quello che sto effettivamente cercando è questo:

Prima Creo una matrice con le lettere

a <- as.matrix(seq(97,122,by=1)) 

Poi creare un frame di dati con 2 colonne con tutte le combinazioni

b <- expand.grid(a, a) 

Infine combino le 2 colonne

apply(b,1,paste,collapse=" ") 

Il problema che ho è che non riesco a trovare un modo per trasformare quei "decimali" al suo carattere Ascii.

Ho provato diverse cose come rawToChar e gsub senza successo.

Qualcuno può indicarmi la giusta direzione?

Grazie

+1

perché non usi direttamente 'lettere'? – Arun

risposta

2

primo metodo diretto:

res <- do.call(paste, expand.grid(letters, letters)) 

Se avete alcuni altri valori ASCII e si desidera ottenere caratteri equivalenti:

val <- 65:96 # whatever values you want the equivalent characters for 
mode(val) <- "raw" # set mode to raw 
# alternatively, val <- as.raw(65:96) 
a <- sapply(val, rawToChar) 
res <- do.call(paste, expand.grid(a, a)) 
+1

Che funziona alla grande Arun. Grazie molto! – Diego

+1

Cerca di evitare di chiamare una variabile 'c' però. – Dason

+0

@Dason, sì. grazie per avermelo fatto notare Ho modificato. – Arun

1

per stampare un carattere ASCII in R è possibile utilizzare la funzione di print con un backslash \ prima di un numero di codice ASCII. Ad esempio per stampare l'equivalente di caratteri di 150 utilizzare print("\150").

o per il vostro esempio di cui sopra si potrebbe provare:

a <- sapply(97:122,function(x) rawToChar(as.raw(x))) 

b <- expand.grid(a,a) 

c <- t(apply(b,1,function(x) paste(x[1],x[2]))) 
+0

Grazie Gary. No, quello di cui ho bisogno è "Sostituire" i valori numerici in un frame di dati con le lettere corrispondenti, per usarli all'interno del codice. Grazie ancora. – Diego

+0

Sono d'accordo con @Arun è probabilmente più facile usare solo 'letters', ma aggiornerò il mio esempio con quello che hai detto. –

+0

Grazie Gary. L'ho provato, ma non fa quello che mi serve. Restituisce 2 variabili ma non il prodotto cartesiano di esse. – Diego

14

Un modo molto semplice per restituire un carattere basato sul suo codice ASCII è la funzione intToUtf8. Funziona anche per i vettori compresi più interi e restituisce i caratteri corrispondenti come un'unica stringa.

vec <- 97:122 
intToUtf8(vec) 
# [1] "abcdefghijklmnopqrstuvwxyz" 

intToUtf8(65) 
# [1] "A"