Как напечатать вывод функции в виде вектора? - PullRequest
0 голосов
/ 24 мая 2019

Мне нужно создать функцию с именем vast, которая печатает високосные годы между year1 и year2 как вектор.

Так вот код, который я использовал:

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

Когда яиспользуйте обширный (2000,2010), он должен дать (2000,2004,2008) в качестве вектора, который может быть сохранен в х, но вместо этого я получаю:

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

Таким образом, х пуст.Я чувствую себя настолько глупо, но я просто не могу понять это.

Ответы [ 2 ]

1 голос
/ 24 мая 2019

Вы должны использовать функцию 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
1 голос
/ 24 мая 2019

Вам необходимо вернуть значения в конце функции.Вы можете явно использовать 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) в функцию, еслиВы хотите напечатать годы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...