Вот векторизованная однострочная строка, которая по желанию позволяет изменить нижнюю границу со значения по умолчанию 100 на что угодно. Если границы неправильные, он возвращает пустой вектор, а не выдает ошибку.
Он работает, создавая вектор 1:500
(или, в более общем случае, 1:n
), а затем проверяет, больше ли каждый элемент чем 100 (или любую нижнюю границу m
, которую вы установили), И является ли каждый элемент нечетным И делится ли каждый элемент на 3. Он использует функцию which
для возврата индексов элементов, которые прошли все тесты.
Test <- function(n, m = 100) which(1:n > m & 1:n %% 2 != 0 & 1:n %% 3 == 0)
Таким образом, вы можете использовать его, как указано в вашем вопросе:
Test(500)
# [1] 105 111 117 123 129 135 141 147 153 159 165 171 177 183 189 195 201 207 213 219
# [21] 225 231 237 243 249 255 261 267 273 279 285 291 297 303 309 315 321 327 333 339
# [41] 345 351 357 363 369 375 381 387 393 399 405 411 417 423 429 435 441 447 453 459
# [61] 465 471 477 483 489 495
Или поиграть с верхними и нижними границами:
Test(100, 50)
# [1] 51 57 63 69 75 81 87 93 99