我正在尝试编写一个函数,该函数标识数字矢量中的数字是奇数还是偶数。数值向量的长度为1000。
我知道for循环可以正常工作,我只是想以采用任意长度向量的函数的形式来概括它
out<-vector()
f3<- function(arg){
for(i in 1:length(arg)){
if((arg[i]%%2==0)==TRUE){
out[i]<-1
}else{out[i]<-0
}
}
}
但是,在函数中运行时,它仅返回NULL。为什么会这样,或者我该怎么做才能将任何数字矢量泛化为函数?
答案 0 :(得分:1)
正如PKumar在评论中所提到的:函数不返回任何内容,这意味着向量out
仅存在于函数的环境中。
要更改此设置,可以在函数末尾添加return(out)
。而且,您还应该在循环之前创建out
来开始您的功能。因此您的功能如下所示。
请注意,我假设您要将某个长度的向量传递给您的函数,结果得到一个长度相同的向量,其中包含1
代表偶数,0
代表奇数。 f3(c(1,1,2))
将返回0 0 1
。
f3 <- function(arg){
out <- vector(length = length(arg), mode = "integer")
for(i in 1:length(arg)){
if((arg[i]%%2==0)==TRUE){ # note that arg[i]%%2==0 will suffice
out[i]<-1
} else {out[i]<-0
}
}
return(out) # calling out without return is enough and more inline with the tidyverse style guide
}
但是,正如塞巴斯蒂安(Sebastiann)在评论中指出的那样,some_vector %% 2
产生的结果几乎相同。区别在于,奇数产生1
,偶数产生0
。您也可以将其放入函数中,并从arg中减去1以反转0
和1
:
f3 <- function(arg){
(arg-1) %% 2
}
答案 1 :(得分:0)
关于您的代码的几点注意事项:
R
out <-vector()
f3 <- function(arg){
for(i in 1:arg){
if(arg[i] %% 2 == 0){
out[i] <- 1
}
else{
out[i] <- 0
}
}
return(out)
}
f3(1000)