在 R 中创建一个函数来返回一个向量

问题描述

我正在编写一个编码项目来定义一个函数 fbr(n,m),它以整数向量 n 和 m 作为输入,对每个元素 i 遍历从 n 到 m 的所有整数,然后返回一个向量对于 n 和 m 之间的每个数字,包含由 fizzbuzz(n) 定义的字符串“Fizz/Buzz/FizzBu​​zz”或数字本身。

我已经定义了如下所示的 fizzbuzz,但不知道从哪里开始构建 fbr(n,m) 函数

 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("")
        }
      }
    }

解决方法

您可以尝试将函数编写为:

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 : ',' Buzz')
    } else if(num %% 3 == 0){
      cat('\nNum : ',' Fizz')
    } else {
      cat('\nNum : ',num)
    }
  }
}

fizzbuzz(14,18)

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

矢量化版本将带有 ifelsecase_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)