r - 在 R 中创建一个函数以返回一个向量
问题描述
我正在编写一个编码项目来定义一个函数 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 : ', 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
矢量化版本将带有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)
推荐阅读
- amazon-web-services - 带有计数插值的 Terrafom 0.12.6 地图变量
- excel - VlookUP 整列带变量
- javascript - 将 JS 日期格式转换为本地化的人类可读格式
- python - 如何“清理”,itertools组合输出?
- use-effect - useEffect WITH [] 参数如何运行多次
- c - C 中的 ispunct() 有例外吗?
- r - 通过查找矩阵/df 更改数据框中的值
- python - 如何查找两列之间的所有日期和时间,例如 .. Datetime1 和 Datetime2 。如何在 Python 或 Excel 中执行此操作
- robotframework - 未找到 RequestLibrary 模块
- types - 位置参数的类型捕获