2010-08-02 97 views
9

我对R的(功能)矢量处理感兴趣。具体来说,什么是R等同于Perl的mapgrep什么是R的Perl的地图和grep的等价物?

下面的Perl脚本里grep偶数组元素乘以2,他们说:

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

我如何能做到这一点的R?我能走到今天,用sapply为Perl的map

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

我在哪里可以阅读更多关于R这种功能的数组操作?

另外,有没有一个PerlR短语书,类似于Perl Python Phrasebook

回答

7

R有“grep”,但它的工作原理与您以前的完全不同。 R有什么更好的建于:它创建阵列片,用布尔表达式的能力:

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

在地图,你可以根据你上面做应用的功能,但它的简单得多,只是写:

a2 * 2 
[1] 4 8 12 16 

或者一步到位:

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

我从来没有听说过一个Perl至R短语的书,如果你发现一个让我知道!一般来说,R的文档少于perl或python,因为它是一种小众语言。

10

快速的:

  • 此外sapply,也有lapply()tapplybyaggregate多在基地。然后在CRAN上有大量附加软件包,例如plyr

  • 对于基本功能的编程在其他语言版本:Reduce()Map()Filter() ......所有这一切都是相同的帮助页面上;尝试使用help(Reduce)即可开始使用。

  • 正如在前面的答案中指出的那样,vectorisation在这里更加合适。

  • 至于grep,R实际上有三个内置的regexp引擎,包括来自libpcre的基于Perl的版本。

  • 你似乎错过了R的一些东西。我会推荐一本关于R和S语言的新书,我的建议是钱伯斯(2008)"Software for Data Analysis"

相关问题