Я думаю, что лучший способ - воспользоваться подходом R vector , который можно рассматривать как очень эффективный для l oop. Например:
divisors = function (n) {
div = 1:(n - 1)
div[n %% div == 0]
}
(примечание: я использую оператор =
для назначения, это не обычная практика в R, где <-
гораздо более распространен. Я использую его здесь, потому что похож на способ выполнения присваиваний на других языках, включая Python)
Здесь div = 1:(1 - n)
создаст вектор возможных делителей. n %% div
вернет остаток для n / div
в виде вектора той же длины, что и div
. Это как если бы мы сделали для l oop ранжирование через каждый элемент div
и конкатенацию каждого результата. Это то, что люди называют векторизацией в R, этот процесс написан на C и действительно эффективен. Последний бит - это подмножество (фильтр) div
, чтобы получить только правильные делители. Я снова использую здесь подход vector , генерируя логический вектор с помощью n %% div == 0
. Подмножество с этим вернет только те значения из div
, для которых выполняется условие, поэтому
> divisors(26)
[1] 1 2 13
Best,