2010-08-02 10 views
9

Sono interessato alla manipolazione vettoriale (funzionale) in R. In particolare, quali sono gli equivalenti di R in Perl map e grep?Quali sono gli equivalenti di R per la mappa di Perl e grep?

Il seguente script Perl greps gli elementi anche matrice e li moltiplica per 2:

@a1=(1..8); 
@a2 = map {$_ * 2} grep {$_ % 2 == 0} @a1; 
print join(" ", @a2) 
# 4 8 12 16 

Come posso farlo in R? Ho avuto fino a questo punto, utilizzando sapply per il Perl di map:

> a1 <- c(1:8) 
> sapply(a1, function(x){x * 2}) 
[1] 2 4 6 8 10 12 14 16 

Dove posso saperne di più su tali manipolazioni matrice funzionali a R?

Inoltre, c'è un Perl a R frasario, simile allo Perl Python Phrasebook?

risposta

7

R ha "grep", ma funziona completamente diverso da quello a cui sei abituato. R ha qualcosa di molto meglio costruito in: ha la capacità di creare le fette di array con un'espressione booleana:

a1 <- c(1:8) 
a2 <- a1 [a1 %% 2 == 0] 
a2 
[1] 2 4 6 8 

per la mappa, è possibile applicare una funzione come avete fatto in precedenza, ma è molto più semplice scrivere solo:

a2 * 2 
[1] 4 8 12 16 

O in un solo passo:

a1[a1 %% 2 == 0] * 2 
[1] 4 8 12 16 

non ho mai sentito parlare di un Perl per R frasario, se mai trovare uno fatemelo sapere! In generale, R ha meno documentazione di perl o python, perché è un linguaggio di nicchia.

10

quelli rapidi:

  • Inoltre sapply, ci sono anche lapply(), tapply, by, aggregate e più nella base. Quindi ci sono molti pacchetti aggiuntivi su CRAN come plyr.

  • Per la programmazione funzionale di base come in altre lingue: Reduce(), Map(), Filter(), ... che si trovano tutti nella stessa pagina di aiuto; prova help(Reduce) per iniziare.

  • Come indicato nella risposta precedente, la vettorizzazione è ancora più appropriata qui.

  • Per quanto riguarda grep, R ha in realtà tre motori regexp integrati, tra cui una versione basata su Perl da libpcre.

  • Sembra che manchi alcune cose di R che ci sono. Suggerirei un buon libro recente su R e il linguaggio S; la mia raccomandazione sarebbe Chambers (2008) "Software for Data Analysis"

Problemi correlati