R 如何写出依赖于常数的动力学方程

R 如何写出依赖于常数的动力学方程,r,for-loop,R,For Loop,我试图写一个依赖于常数(层数)的方程。如下所示,如果我有两个级别,if语句将引用L1和L2 问题: 如何修改代码以反映x个级别数?x可以是任何整数(通常从2到12) 如果没有for循环,如何重写代码 非常感谢你的帮助 例如(两个级别): 查表 L1\u var这是我解决问题的方法,大量使用purr和dplyr。它应该适用于tbl中的任意数量的变量: library(purrr) library(dplyr) tbl %>% pmap(function(...) { args

我试图写一个依赖于常数(层数)的方程。如下所示,如果我有两个级别,if语句将引用L1和L2

问题:

  • 如何修改代码以反映x个级别数?x可以是任何整数(通常从2到12)
  • 如果没有for循环,如何重写代码
  • 非常感谢你的帮助

    例如(两个级别):

    查表
    L1\u var这是我解决问题的方法,大量使用
    purr
    dplyr
    。它应该适用于
    tbl
    中的任意数量的变量:

    library(purrr)
    library(dplyr)
    
    tbl %>%
      pmap(function(...) {
        args <- c(...)
        vars <- args[seq(1, length(args), 2)] %>%
          set_names(NULL)
        values <- args[seq(2, length(args), 2)] %>%
          set_names(vars)
        df %>%
          filter(across(vars, ~ . == values[cur_column()])) %>%
          mutate(across(.cols = vars,
                        .fns = ~ sprintf("%s: %s", cur_column(), .),
                        .names = "L{which(vars ==.col)}"))
      }) %>%
      bind_rows()
    
    库(purrr)
    图书馆(dplyr)
    待定%>%
    pmap(功能(…){
    args%
    过滤器(跨(变量,~.==值[cur_column()]))%>%
    突变(跨越(.cols=vars,
    .fns=~sprintf(“%s:%s”,cur_column(),),
    .names=“L{which(vars==.col)}”))
    }) %>%
    绑定_行()
    
    非常感谢!
    Price <- c("Premium", "AO", "AO")
    Type  <- c("Diet", "Regular", "Diet")
    Form  <- c("Bottle", "Bottle", "Can")
    
    df <- data.frame(Price, Type, Form)
    
    for (i in 1:nrow(df)) {
      for (j in 1:nrow(tbl)) {
        if (df[i, tbl$L1_var[j]] == tbl$L1_val[j] & 
            df[i, tbl$L2_var[j]] == tbl$L2_val[j]) {
          df[i, "L1"] <- paste0(tbl$L1_var[j], ": ", tbl$L1_val[j])
          df[i, "L2"] <- paste0(tbl$L2_var[j], ": ", tbl$L2_val[j])
        }
      }
    }
    
    for (i in 1:nrow(df)) {
      for (j in 1:nrow(tbl)) {
        if (df[i, tbl$L1_var[j]] == tbl$L1_val[j] & 
            df[i, tbl$L2_var[j]] == tbl$L2_val[j] &
            df[i, tbl$L3_var[j]] == tbl$L3_val[j] ) {
           
          df[i, "L1"] <- paste0(tbl$L1_var[j], ": ", tbl$L1_val[j])
          df[i, "L2"] <- paste0(tbl$L2_var[j], ": ", tbl$L2_val[j])
          df[i, "L3"] <- paste0(tbl$L3_var[j], ": ", tbl$L3_val[j])
        }
      }
    }
    
    library(purrr)
    library(dplyr)
    
    tbl %>%
      pmap(function(...) {
        args <- c(...)
        vars <- args[seq(1, length(args), 2)] %>%
          set_names(NULL)
        values <- args[seq(2, length(args), 2)] %>%
          set_names(vars)
        df %>%
          filter(across(vars, ~ . == values[cur_column()])) %>%
          mutate(across(.cols = vars,
                        .fns = ~ sprintf("%s: %s", cur_column(), .),
                        .names = "L{which(vars ==.col)}"))
      }) %>%
      bind_rows()