小编EJJ*_*EJJ的帖子

将 case_when 与多个向量一起使用

我正在尝试case_when根据两个单独的输入来修改/变异列。用于在右侧创建左侧逻辑和相应输入值的一个。下面提供了一个示例。

library(dplyr)
library(purrr)
library(tibble)

df <- tibble(var = paste0(rep("var", 10), 1:10),
                 label = c("label1", "label2", rep(NA, 7), "label10"))

match_var <- paste0(rep("var", 7), 3:9)
new_labels <- paste0(rep("add_this_label", 7), 3:9)

df %>% 
  mutate(test = map2(match_var , new_labels,
                     ~case_when(
                       var == .x ~ .y,
                       TRUE ~ label
                     )
  ))
Run Code Online (Sandbox Code Playgroud)

我认为问题在于,case_when所有内容都被评估为表达式,但我不完全确定。人们可以手动输入其中的所有 7 行case_when,但我的应用程序要求我在向量match_varsnew_labels很长时完成此操作 - 使得手动输入case_when不可行。

df %>% 
  mutate(label = case_when(
    var == match_var[1] ~ new_labels[1],
    var == match_var[2] ~ new_labels[2],
    var == …
Run Code Online (Sandbox Code Playgroud)

r dplyr

5
推荐指数
1
解决办法
3498
查看次数

使用ODE中的循环以图形方式比较不同的参数R.

我正在使用该deSolve软件包绘制几个微分方程(如果感兴趣,阅读http://www.maa.org/press/periodicals/loci/joma/the-sir-model-for-spread-of-disease-the-微分方程模型).

我最终的目标是创建一个迭代函数或过程(for循环)来绘制某些参数(beta和gamma)的变化将如何影响解决方案.首选输出是一个列表,其中包含ode循环中每个指定beta值的所有解决方案.我遇到了将循环集成到deSolve软件包所需的设置中的问题ode.

在下面的代码中,我试图绘制参数beta中值的范围(1到2的增量为0.1)将如何影响微分方程的图.

for(k in seq(1,2,by=0.1)){ #range of values for beta

    init <- c(S=1-1e-6, I=1e-6, R=0) #initial conditions for odes
    time <- seq(0,80,by=1) #time period
    parameters <- c(beta=k, gamma=0.15) #parameters in ode

SIR <- function(time,state,parameters){ #function containing equaations
    with(as.list(c(state,parameters)),{
        dS <- -beta*S*I
        dI <- beta*S*I-gamma*I
        dR <- gamma*I

        return(list(c(dS,dI,dR)))
    })
}

ode(y=init,times=time,func=SIR()[beta],parms=parameters[k])}

}
Run Code Online (Sandbox Code Playgroud)

我得到的第一个错误表明缺少SIR函数中的参数参数

as.list中的错误(c(init,parameters)):缺少参数"parameters",没有默认值

我不明白为什么在我之前分配parameters的行中报告了这个错误.

r ode

4
推荐指数
1
解决办法
716
查看次数

标签 统计

r ×2

dplyr ×1

ode ×1