2010-08-02 15 views
9

Je suis intéressé par la manipulation de vecteurs (fonctionnelle) en R. Plus précisément, quels sont les équivalents R aux Perl map et grep?Quels sont les équivalents de R à la carte et au grep de Perl?

Le script Perl greps les même éléments du tableau et les multiplie par 2:

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

Comment puis-je faire cela en R? Je suis arrivé à ce point, en utilisant sapply pour Perl map:

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

Où puis-je en savoir plus sur ces manipulations de tableaux fonctionnels dans R?

De même, existe-t-il un carnet de phrases Perl à R, similaire au Perl Python Phrasebook?

Répondre

7

R a "grep", mais il fonctionne complètement différent de ce que vous êtes habitué. R a quelque chose de beaucoup mieux construit: il a la possibilité de créer des tranches de tableau avec une expression booléenne:

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

Pour carte, vous pouvez appliquer une fonction que vous avez fait ci-dessus, mais il est beaucoup plus simple à écrire simplement:

a2 * 2 
[1] 4 8 12 16 

Ou en une seule étape:

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

Je ne l'ai jamais entendu parler d'un Perl à R livre de phrases, si vous trouvez jamais me le faire savoir! En général, R a moins de documentation que perl ou python, parce que c'est un langage de niche.

10

rapides: les

  • En plus sapply, il y a aussi lapply(), tapply, by, aggregate et plus dans la base. Ensuite, il y a des charges de paquet additionnel sur CRAN tel que plyr. Pour la programmation fonctionnelle de base comme dans d'autres langages: Reduce(), Map(), Filter(), ... tous sur la même page d'aide; essayez help(Reduce) pour commencer. Comme noté dans la réponse précédente, la vectorisation est encore plus appropriée ici. Comme pour grep, R a trois moteurs regexp intégrés, y compris une version basée sur Perl de libpcre.

  • Vous semblez manquer quelques éléments de R qui sont là. Je proposerais un bon livre récent sur R et le langage S; ma recommandation serait Chambers (2008) "Software for Data Analysis"