我的任务是创建一个检查自然数是否为质数的函数,而不使用for()函数。我通过定义一个"set“并使用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()函数相同的任务。为我的"set“中的每个成员检查nat%%N != 0的逻辑语句。我不是专家,但在我看来,all()函数是逻辑值的for()函数,因此,它们的内部工作方式必须非常相似。
如果有人能澄清all()函数的工作方式是否与for()函数相同,我将不胜感激。all()可以被认为是for()函数吗?
发布于 2021-11-11 14:38:27
在某种意义上,对长度大于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
的代码都应该没问题。
https://stackoverflow.com/questions/69935273
复制相似问题