Что эквиваленты R к карте и grep Perl?

Я интересуюсь (функциональным) векторным управлением в 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?

Кроме того, есть ли a Perl кому: R разговорник, подобный Perl Разговорник Python?

9
задан Ether 2 August 2010 в 15:35
поделиться

2 ответа

В 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

Или в one step:

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

Я никогда не слышал о разговорниках Perl to R, если вы когда-нибудь найдете такой, дайте мне знать! В общем, у R меньше документации, чем у perl или python, потому что это такой нишевый язык.

7
ответ дан 4 December 2019 в 12:16
поделиться

Быстрые:

  • Кроме sapply, есть еще lapply(), tapply, by, aggregate и многое другое в базе. Затем на CRAN есть множество дополнительных пакетов, таких как plyr.

  • Для базового функционального программирования, как и в других языках: Reduce(), Map(), Filter(), ... все они находятся на одной странице помощи; попробуйте help(Reduce), чтобы начать.

  • Как отмечалось в предыдущем ответе, векторизация здесь даже более уместна.

  • Что касается grep, то в R на самом деле встроено три механизма regexp, включая версию на основе Perl из libpcre.

  • Похоже, вам не хватает некоторых вещей в R, которые там есть. Я бы посоветовал хорошую недавнюю книгу по R и языку S; моя рекомендация - Chambers (2008) "Software for Data Analysis"

10
ответ дан 4 December 2019 в 12:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: