目标
我想使用dplyr在参数网格上运行模拟.具体来说,我想要一个我可以在另一个程序中使用的函数
这是我的方法
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) 在2.0之前,在ggplot2中我可以使用element_blank和labeller仅标记行或列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) 给定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)