Связана ли функция all( ) с функцией for( ) в R?

#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 этого, должно быть в порядке.