我正在制作一个营养分数计算器.作为一个简化的例子,计算器将食物的(1)纤维含量和(2)食物类别作为输入,并根据其纤维含量输出产品的健康分数.

然而,纤维的评分会根据产品所属的食物类别进行调整.例如,在下面的代码中,纤维值为1的A类产品应得3分,但纤维值为1的B类产品应得6分.

library(tidyverse)

product_category <- tibble(
  food_type = c("Fruits", "Vegetables"),
  category = c("Category A", "Category B")
)

score_schedule_a <- tibble(
  fibre_amount = c(1, 2, 3),
  score = c(3, 6, 9)
)

score_schedule_b <- tibble(
  fibre_amount = c(1, 2, 3),
  score = c(6, 12, 18)
)

我认为最后一个函数是这样开始的:

score_calculator <- function(fibre, food) {
  category <- product_category %>%
    filter(food_type == food) %>%
    pull(category)
}

但我不知道如何使用category来指定在计算分数时查找哪个表.从这里开始的步骤应该是,我们使用category来决定使用score_schedule_ascore_schedule_b中的哪一个,然后取函数中输入的纤维值来得出关联的分数.

因此,预期功能的一些示例如下:

score_calculator(2, "Vegetables")表示输出12. score_calculator(1, "Vegetables")给出输出6. score_calculator(1, "Fruits")表示输出3.

How can I pass which table to look up as an argument to my function?

推荐答案

如果允许我对当前存储数据的方式做一些更改,我会将分数存储在一个命名列表中,其中名称与类别名称相对应.

library(dplyr)

lkup_list <- list(`Category A` = score_schedule_a, `Category B` = score_schedule_b)

然后,我们可以从该列表中查找所选的category,并返回相应的score.

score_calculator <- function(product_category, fibre, food, lkup_list) {
  category <- product_category %>%
    filter(food_type == food) %>%
    pull(category)
  
  lkup_list[[category]] %>%
    filter(fibre_amount == fibre) %>%
    pull(score)
}

score_calculator(product_category, 2, "Vegetables", lkup_list)
#[1] 12
score_calculator(product_category, 1, "Vegetables", lkup_list)
#[1] 6
score_calculator(product_category, 1, "Fruits", lkup_list) 
#[1] 3

R相关问答推荐

计算R中的威布尔分布的EDF

查找图下的面积

如何按排序顺序打印一个框架中所有精确的唯一值?

R Highcharts与两个位置关联的注释

derrr summarise每个组返回多行?

在R中替换函数中的特定符号

如何改变x轴比例的列在面

在使用bslb和bootstrap5时,有没有办法更改特定dt行的 colored颜色 ?

根据现有列的名称和字符串的存在进行变异以创建多个新列

以相同的方式对每个表进行排序

将统计检验添加到GGPUBR中的盒图,在R

将列的值乘以在不同数据集中找到的值

按两个因素将观测值分组后计算单独的百分比

主题(Legend.key=Element_RECT(Fill=&Quot;White&Quot;))不起作用

R try Catch in the loop-跳过缺少的值并创建一个DF,显示跳过的内容

Data.table::Shift type=允许扩展数据(&Q;LAG&Q;)

如果极点中存在部分匹配,则替换整个字符串

如何在一个GGPLATE中绘制多个灰度平滑?

R中的交叉表

向数据添加标签