#r #function #for-loop
Вопрос:
Мне было поручено создать функцию, которая проверяет, является ли натуральное число простым или нет, без использования функции for (). Это я решил, определив «набор» и используя функцию all ().
prime lt;- function(nat){ N lt;- 1:(nat-1) N lt;- N[-c(1,nat)] if(!isTRUE(all(nat%%N != 0))){ return(paste(nat,"is a prime number.")) }else{ return(paste(nat,"is not a prime number.")) } } #Assuming the input is actually a natural number. Error response is not my issue.
Теперь мой вопрос в том, действительно ли функция all() не является «замаскированной»функцией for (). В основном он выполняет ту же задачу, что и функция for (). Проверка логического утверждения nat%%N != 0 для каждого члена моего «набора». Я не эксперт, но мне кажется, что функция all() является функцией for() для логических значений, и поэтому их внутренняя работа должна быть очень похожей.
Если бы кто-нибудь мог дать разъяснения относительно того, работает ли функция all() так же, как функция for (), или нет, я был бы признателен. Можно ли считать функцию all() функцией for ()?
Комментарии:
1. Это неверно. Это все равно, что сказать
sum(1:10)
, что замаскированная петля for. Просто чтобы вы знали, R-это векторизованный язык, означающий, что большинство функций работают с векторами. Это не значит, что они предназначены для замаскированных петель. Это просто означает, что вам не нужно писать цикл for, потому что функция ЕГО СОДЕРЖИТ. так что НЕТall
— это не цикл for
Ответ №1:
В каком-то смысле любая функция, которая работает с вектором длиной больше 1, может быть представлена в виде for
цикла. Например, рассмотрим sum()
, который вычисляет сумму элементов данного вектора. Это можно было бы представить следующим образом:
sum lt;- function(x) { s lt;- 0 for (i in x) s lt;- s i s }
Действительно, в коде C, лежащем в основе R, он действительно может быть представлен таким образом. Считаете ли вы sum()
, что это for
петля? Если нет, all()
может быть представлено в виде суммы:
all lt;- function(x) { sum(as.logical(x)) == length(x) }
for
В данном случае это явно не петля. Если ваше задание состоит в том, чтобы избегать использования for
функции, то все, что вы напишете, чтобы избежать for
этого, должно быть в порядке.