什么是R';s相当于Perl';什么是地图和格雷普?

什么是R';s相当于Perl';什么是地图和格雷普?,r,perl,dictionary,functional-programming,R,Perl,Dictionary,Functional Programming,我对R中的(功能)向量操作感兴趣。具体来说,R与Perl和的等价物是什么 以下Perl脚本将偶数数组元素变灰,并将它们乘以2: @a1=(1..8); @a2 = map {$_ * 2} grep {$_ % 2 == 0} @a1; print join(" ", @a2) # 4 8 12 16 如何在R中执行此操作?我通过对Perl的映射使用sapply实现了这一点: > a1 <- c(1:8) > sapply(a1, function(x){x * 2}) [

我对
R
中的(功能)向量操作感兴趣。具体来说,
R
与Perl和的等价物是什么

以下Perl脚本将偶数数组元素变灰,并将它们乘以2:

@a1=(1..8); 
@a2 = map {$_ * 2} grep {$_ % 2 == 0} @a1;
print join(" ", @a2)
# 4 8 12 16
如何在
R
中执行此操作?我通过对Perl的
映射使用
sapply
实现了这一点:

> a1 <- c(1:8)
> sapply(a1, function(x){x * 2})
[1]  2  4  6  8 10 12 14 16
>a1-sapply(a1,函数(x){x*2})
[1]  2  4  6  8 10 12 14 16
R
中,我在哪里可以阅读更多关于函数数组操作的信息

另外,是否有类似于的
Perl
to
R
短语手册

R有“grep”,但它的工作原理与您习惯的完全不同。R具有更好的内置功能:它能够使用布尔表达式创建数组切片:

a1 <- c(1:8)
a2 <- a1 [a1 %% 2 == 0]
a2
[1] 2 4 6 8
或者一步到位:

a1[a1 %% 2 == 0] * 2
[1]  4  8 12 16
我从来没有听说过Perl-to-R短语手册,如果您找到了,请告诉我!一般来说,R的文档比perl或python都少,因为它是一种非常适合的语言。

快速语言:

  • 除了
    sapply
    ,还有
    lappy()
    tapply
    by
    aggregate
    等等。然后在上有许多附加包,例如

  • 对于其他语言中的基本函数编程:
    Reduce()
    Map()
    Filter()
    。。。所有这些都在同一帮助页面上;尝试
    帮助(减少)
    开始

  • 正如前面的答案所指出的,矢量化在这里更合适

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

  • 你似乎从R中遗漏了一些东西。我推荐一本关于R和S语言的好书;我的建议是:钱伯斯(2008年)

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