如何将函数的输出打印为矢量?

时间:2019-05-24 07:12:01

标签: r function if-statement

我必须创建一个名为great的函数,以打印出year1和year2之间的leap年作为矢量。

这是我一直在使用的代码:

vast <- function(year1,year2) {
  year <- year1
  for(year in year1:year2) {
    if(((year%%4==0)&(year%%100!= 0))|(year%%400==0))
    vast <- print(year)
  }
}

当我使用broad(2000,2010)时,它应该给出(2000,2004,2008)作为可以保存到x中的向量,但我得到:

x <- vast(2000,2010)
[1] 2000
[1] 2004
[1] 2008
x
NULL

因此x为空。我觉得很愚蠢,但我无法弄清楚。

2 个答案:

答案 0 :(得分:1)

您需要在函数末尾返回值。您可以显式使用return来执行此操作,否则将自动返回函数的最后一行。

比较运算符也被矢量化,因此您可以

vast <- function(year1,year2){
  year <- year1 : year2
  leap_year <- year[(year %%4 == 0 & year %% 100 != 0) | (year %% 400 == 0)]
  return(leap_year)
}

然后致电vast

x <- vast(2000,2010)
x
#[1] 2000 2004 2008

如果要打印年份,可以在函数中添加print(leap_year)语句。

答案 1 :(得分:1)

如果要从函数中获取值,则必须使用return()函数。这是您的代码的可能解决方案:

vast <- function(year1,year2){
  vast <- c()
  year <- year1
  for(year in year1:year2){
    if(((year%%4==0)&(year%%100!= 0))|(year%%400==0)){
      vast <- c(vast, year)
    }
  }
  return(vast)
}

x <- vast(2000,2010)
x