小编jai*_*ash的帖子

使用标准评估和do_在没有do.call的参数网格上运行模拟

目标

我想使用dplyr在参数网格上运行模拟.具体来说,我想要一个我可以在另一个程序中使用的函数

  • 传递一个data.frame
  • 对于每一行,使用每列作为参数计算一些模拟
  • 也传递了一些额外的数据(例如,初始条件)

这是我的方法

require(dplyr)
run <- function(data, fun, fixed_parameters, ...) {
   ## ....
   ## argument checking
   ##

   fixed_parameters <- as.environment(fixed_parameters)
   grouped_out <- do_(rowwise(data), ~ do.call(fun, c(., fixed_parameters, ...)))
   ungroup(grouped_out)
 }
Run Code Online (Sandbox Code Playgroud)

这有效.例如,对于

growth <- function(n, r, K, b) {
  # some dynamical simulation
  # this is an obviously-inefficient way to do this ;)
  n  + r - exp(n) / K - b - rnorm(1, 0, 0.1)
}
growth_runner <- function(r, K, b, ic, ...) {
  # a wrapper …
Run Code Online (Sandbox Code Playgroud)

simulation design-patterns r tidyverse

15
推荐指数
2
解决办法
557
查看次数

使用ggplot2> = 2.0中的贴标机混合空和bquote-d facet标签

在2.0之前,在ggplot2中我可以使用element_blanklabeller仅标记行或列facet_grid,如:

library(ggplot2)
g <- ggplot(mtcars) + geom_point(aes(mpg, cyl))
g + facet_grid(vs ~ gear, labeller=labeller(vs = element_blank(),
                                             gear = label_bquote(mu == .(x))))
Run Code Online (Sandbox Code Playgroud)

现在,对于ggplot22.0版本,这不起作用,给予

Error in if (attr(labels, "facet") == "wrap") { :
  argument is of length zero
Calls: <Anonymous> ... lapply -> FUN -> <Anonymous> -> x -> resolve_labeller
Run Code Online (Sandbox Code Playgroud)

虽然改进label_bquote很好,有没有办法让上面的工作用labeller

我试过了:

1)传球NULL,但方面默认为label_value(按照?label_bquote)

  g + facet_grid(vs ~ gear,
               labeller = label_bquote(
                            rows = …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

7
推荐指数
1
解决办法
503
查看次数

使用两个分组指定来创建一个"组合"分组变量

给定data.frame:

df <- data.frame(grp1 = c(1,1,1,2,2,2,3,3,3,4,4,4),
                 grp2 = c(1,2,3,3,4,5,6,7,8,6,9,10))

#> df
#   grp1 grp2
#1     1    1
#2     1    2
#3     1    3
#4     2    3
#5     2    4
#6     2    5
#7     3    6
#8     3    7
#9     3    8
#10    4    6
#11    4    9
#12    4   10
Run Code Online (Sandbox Code Playgroud)

两个coluns都是分组变量,因此grp1已知列中的所有1 都被组合在一起,依此类推所有2,等等.然后同样如此grp2.众所周知,所有1都是相同的,所有2都是相同的.

因此,如果我们查看第3行和第4行,基于第1列,我们知道前3行可以组合在一起,后3行可以组合在一起.然后由于第3行和第4行共享相同的grp2值,我们知道所有6行实际上可以组合在一起.

根据相同的逻辑,我们可以看到最后六行也可以组合在一起(因为第7行和第10行共享相同的行grp2).

除了编写一组相当for()复杂的循环之外,还有更直接的方法吗?我还没有想过一个人.

我希望获得的最终输出看起来像:

# > df
#    grp1 grp2 combinedGrp
# 1     1    1           1
# 2 …
Run Code Online (Sandbox Code Playgroud)

algorithm r

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

标签 统计

r ×3

algorithm ×1

design-patterns ×1

ggplot2 ×1

simulation ×1

tidyverse ×1