我对R
中的(功能)矢量操作感兴趣。具体来说,R
与Perl map
和grep
的等价物是什么?
以下Perl脚本使用偶数数组元素并将它们乘以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
中有关此类功能数组操作的更多信息?
此外,是否有Perl
到R
短语手册,类似于Perl Python Phrasebook?
答案 0 :(得分:10)
快速的:
除sapply
外,基地还有lapply()
,tapply
,by
,aggregate
等。然后CRAN上有大量的附加包,例如plyr。
对于基本函数式编程,与其他语言一样:Reduce()
,Map()
,Filter()
,...所有这些都在同一个帮助页面上;尝试help(Reduce)
开始使用。
如前面的回答所述,矢量化在这里更合适。
至于grep
,R实际上有三个内置的regexp引擎,包括libpcre的基于Perl的版本。
你似乎错过了R中的一些东西。我建议最近出版一本关于R和S语言的书。我的建议是钱伯斯(2008)"Software for Data Analysis"
答案 1 :(得分: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 to R短语书,如果你找到一个让我知道的话!一般来说,R的文档比perl或python少,因为它是一种小众语言。