Р: Как я могу создать подмножество списка через нотацию массива, не объявляя его? - PullRequest
1 голос
/ 21 апреля 2020

В качестве примера того, что мне нужно, предположим, что я хочу, чтобы каждое число, кратное 3, в списке чисел от 1 до 100. Я знаю, что проще сделать это следующим образом:

all<-1:100  
mod3<-all[all%%3==0]

Есть ли способ сделать это без первой строки? Кажется глупым, что я должен объявить список (и, следовательно, дать ему имя), прежде чем я могу его подмножество. Я мог бы вызвать функцию subset, но запись массива во второй строке была настолько естественной, что было бы стыдно ее не использовать. В идеальном мире я бы назвал что-то вроде 1:100[1:100%%3==0], но это, очевидно, дает ошибки. Обращаясь только к тем вещам, которые встроены в R, какие у меня варианты?

1 Ответ

1 голос
/ 21 апреля 2020

Мы можем заключить в квадратные скобки, чтобы сделать его автономным блоком, так как есть приоритет для разных операторов

(1:100)[(1:100)%%3==0]

Если при проверке ?Syntax, различаются приоритеты операторов

#:: ::: access variables in a namespace
#$ @    component / slot extraction
#[ [[   indexing
#^  exponentiation (right to left)
#- +    unary minus and plus
#:  sequence operator
#%any%  special operators (including %% and %/%)
#* /    multiply, divide
#...

В вышеприведенном случае выражение в [] работает, как и ожидалось, поскольку : выше по сравнению с %%. Но проблема возникла только потому, что [ выше по сравнению с :

...