1

I'm working on a coding project to define a function fbr(n,m) that takes integer vectors n and m as input, goes through all integers from n up to m for every element i, then returns a vector that for each number between n and m contains either a string "Fizz/Buzz/FizzBuzz" as defined by fizzbuzz(n) or the number itself.

I've already defined fizzbuzz as displayed below, but don't know where to start building the fbr(n,m) function

 fizzbuzz <- function(n) {
     for(i in length(n)){
      if(n[i] %%  15 == 0){
        print('Fizzbuzz')
      } else if(n[i] %% 5 == 0){
        print('Buzz')
      } else if(n[i] %% 3 == 0){
        print('Fizz')
        } else {
          print("")
        }
      }
    }

1 Answers1

0

You may try writing the function as :

fizzbuzz <- function(n, m) {
  vec <- n:m
  for(num in vec){
    if(num %%  15 == 0){
      cat('\nNum : ', num, ' Fizzbuzz')
    } else if(num %% 5 == 0){
      cat('\nNum : ', num, ' Buzz')
    } else if(num %% 3 == 0){
      cat('\nNum : ', num, ' Fizz')
    } else {
      cat('\nNum : ', num)
    }
  }
}

fizzbuzz(14, 18)

#Num :  14
#Num :  15  Fizzbuzz
#Num :  16
#Num :  17
#Num :  18  Fizz

A vectorised version would be with ifelse or case_when :


fizzbuzz_vec <- function(n, m) {
  vec <- n:m
  dplyr::case_when(vec %% 15 == 0 ~ 'Fizzbuzz', 
                   vec %% 5 == 0 ~ 'Buzz', 
                   vec %% 3 == 0 ~ 'Fizz', 
                   TRUE ~ '')
}
fizzbuzz_vec(14, 18)
Ronak Shah
  • 377,200
  • 20
  • 156
  • 213