Метод JD Long действительно первый, который пришёл в голову, но другой:
Filter(function(x) !(12345 %% x), 1:1000)
Я думаю, что довольно забавно избегать необходимости явного присваивания.(Вид слишком плох, чтобы каждый раз создавать новую функцию.) (В этом случае «!» Преобразует ненулевое значение в ЛОЖЬ, а ноль в ИСТИНА. «Фильтр» выбирает каждый элемент, оценивающий в ИСТИНА.)
Также избегая необходимости отдельного выделения и не создавая новую функцию:
which(!(12345 %% 1:1000))
Время:
> y <- 1:1000
> system.time(replicate(1e5, y[12345 %% y == 0 ]))
user system elapsed
8.486 0.058 8.589
> system.time(replicate(1e5, Filter(function(x) !(12345 %% x), y)))
Timing stopped at: 90.691 0.798 96.118 # I got impatient and killed it
# Even pulling the definition of the predicate outside,
# it's still too slow for me want to wait for it to finish.
# I'm surprised Filter is so slow.
> system.time(replicate(1e5, which(!12345 %% y)))
user system elapsed
11.618 0.095 11.792
Итак, похоже, что метод Дж. Д. Лонга - победитель.