2013-04-14 10 views
28

Есть ли способ реализовать понимание списка в R?Понимание списка в R

Как питон:

sum([x for x in range(1000) if x % 3== 0 or x % 5== 0]) 

же в Haskell:

sum [x| x<-[1..1000-1], x`mod` 3 ==0 || x `mod` 5 ==0 ] 

Что практический способ применить это в R?

Ник

ответ

24

Что-то вроде этого?

l <- 1:1000 
sum(l[l %% 3 == 0 | l %% 5 == 0]) 
+0

Спасибо! (Пустые пространства вокруг операторов %% могут улучшить читаемость.) – Nick

+0

Отредактированный ответ с пробелами для будущей читаемости. – MadScone

+4

Не то, чтобы это изменило бы, но это было бы быстрее, поскольку оно использует целые числа и не создает другого вектора: 'sum (l * (l %% 3L == 0L | l %% 5L == 0L))' – flodel

8

Да, список понимание возможно в R:

sum((1:1000)[(1:1000 %% 3) == 0 | (1:1000 %% 5) == 0]) 
2

И, (вид) для-понимания Скале:

for(i in {x <- 1:100;x[x%%2 == 0]})print(i) 
+0

Возможно ли также прямое «выход» из цикла 'for', как в Scala? – bluenote10

+2

Такова роль 'sapply' [семейных функций] (http://www.r-bloggers.com/using-apply-sapply-lapply-in-r/)' x <- sapply (1:10, функция (х) х * х) ' – PedroB

1

Другой способ

sum(l<-(1:1000)[l %% 3 == 0 | l %% 5 == 0]) 
Смежные вопросы