【问题标题】:Is the all( ) function related to the for( ) function in R?all( ) 函数是否与 R 中的 for( ) 函数相关?
【发布时间】:2021-12-24 08:25:00
【问题描述】:

我的任务是创建一个函数来检查自然数是否为素数,而不使用 for() 函数。我通过定义一个“集合”并使用 all() 函数解决了这个问题。

prime <- function(nat){
  N <- 1:(nat-1)
  N <- 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() 函数吗?

【问题讨论】:

  • 这是不正确的。就像说sum(1:10) 是变相的for 循环一样。只是为了让您知道,R 是一种向量化语言,这意味着大多数函数都使用向量。这并不意味着它们是变相的循环。这只是意味着您不必编写 for 循环,因为该函数包含一个。所以 NO all 不是 for 循环

标签: r function for-loop


【解决方案1】:

在某种意义上,任何对长度大于 1 的向量进行操作的函数都可以表示为for 循环。例如,考虑sum(),它计算给定向量的元素之和。可以表示如下:

sum <- function(x) {
  s <- 0
  for (i in x) s <- s + i
  s
}

确实,在 R 底层的 C 代码中,它实际上是用这种方式表示的。你认为sum()for 循环吗?如果不是,all() 可以表示为总和:

all <- function(x) {
  sum(as.logical(x)) == length(x)
}

在这种情况下,显然不是for 循环。如果您的任务是避免使用for 函数,那么您编写的任何避免for 的内容都可以。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-31
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 2019-08-30
    • 2020-01-16
    • 2016-10-13
    • 2011-09-11
    相关资源
    最近更新 更多