首页 > 解决方案 > 是否有 for 循环或 purrr 解决方案?

问题描述

我正在尝试为一个项目做一些功率计算。代码有效,但我的 for 循环无效。我有两个问题

a) 有人能告诉我哪里出错了吗 b) 有没有 purrr 选项

install.packages("WebPower")
library(WebPower)


rate <- function(cases,weeks,population){cases/weeks/population}
rate <- rate(cases = 243,weeks = 15,population = 153126)

wp.poisson(exp0 = rate*2,exp1 = 0.5,alpha = 0.05,power = 0.8,alternative ='less',family = 'Poisson')

res_0.5 <- wp.poisson(n = seq(80000, 200000, 10000), exp0 = rate*2,exp1 = 0.5,alpha = 
0.05,alternative ='less',family = 'Poisson')
res_0.4 <- wp.poisson(n = seq(80000, 200000, 10000), exp0 = rate*2,exp1 = 0.4,alpha = 
0.05,alternative ='less',family = 'Poisson')
res_0.3 <- wp.poisson(n = seq(80000, 200000, 10000), exp0 = rate*2,exp1 = 0.3,alpha = 
0.05,alternative ='less',family = 'Poisson')
res_0.2 <- wp.poisson(n = seq(80000, 200000, 10000), exp0 = rate*2,exp1 = 0.2,alpha = 
0.05,alternative ='less',family = 'Poisson')}

for(i in seq(0.2,0.5,0.1)){
paste0('res_',i) <- wp.poisson(n = seq(80000, 200000, 10000), exp0 = rate*2,exp1 = i,alpha = 
0.05,alternative ='less',family = 'Poisson')}

标签: r

解决方案


如果我们需要一个循环,循环遍历这些exp1值。最好将输出存储在一个list虽然而不是在全局环境中创建多个对象。

v1 <- c(0.5, 0.4, 0.3, 0.2)
out <- lapply(v1, function(ex)

   wp.poisson(n = seq(80000, 200000, 10000), exp0 = rate*2,exp1 = ex,
   alpha = 0.05,alternative ='less',family = 'Poisson'))

names(out) <- paste0('res_', v1)
list2env(out, .GlobalEnv)

mappurrr

library(purrr)
out <- map(v1, ~ .x

   wp.poisson(n = seq(80000, 200000, 10000), exp0 = rate*2,exp1 = .x,
   alpha = 0.05,alternative ='less',family = 'Poisson'))

然后list在执行之前更改名称list2env


for循环中我们需要assign

for(i in seq(0.2,0.5,0.1)){
   assign(paste0('res_',i), wp.poisson(n = seq(80000, 200000, 10000), 
       exp0 = rate*2,exp1 = i,alpha = 
          0.05,alternative ='less',family = 'Poisson'))
  }

推荐阅读