首页 > 解决方案 > 在 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("")
        }
      }
    }

标签: rfizzbuzz

解决方案


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

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

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

推荐阅读