问题描述
我正在编写一个编码项目来定义一个函数 fbr(n,m),它以整数向量 n 和 m 作为输入,对每个元素 i 遍历从 n 到 m 的所有整数,然后返回一个向量对于 n 和 m 之间的每个数字,包含由 fizzbuzz(n) 定义的字符串“Fizz/Buzz/FizzBuzz”或数字本身。
我已经定义了如下所示的 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
矢量化版本将带有 ifelse
或 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)