【问题标题】:All possible argument specifications for a function in RR中函数的所有可能参数规范
【发布时间】:2021-07-22 17:40:01
【问题描述】:

我有一个如下形式的函数:

model <- Create(parameter1 = list(model = "a" , "b"),
                parameter2 = list(distribution = "x" , "y"))

我想使用上面的函数为这个“模型”创建所有可能的规范。

parameter1parameter2 的可能值为:

parameter1: "a", "b", "c", "d", "e"

parameter2: "x", "y", "z", "w", "t", "v"

我尝试过使用for 循环,但到目前为止还没有成功。

任何帮助将不胜感激。

【问题讨论】:

  • 是模型,分布一次取两个值
  • @akrun 是的,一次总是两个值。可以是重复值。
  • library(tidyr) 参数1

标签: r function loops combinatorics


【解决方案1】:

我们可以使用combn 来创建每个“参数”的配对组合,

 d1 <- expand.grid(parameter1, parameter1, stringsAsFactors = FALSE)

 d2 <- expand.grid(parameter2, parameter2, stringsAsFactors = FALSE)
 names(d2) <- c("Var3", "Var4")

然后使用expand.gridcrossing,展开创建的两个数据集

library(tidyr)
parameter_dat <- crossing(d1, d2)
str(parameter_dat)
tibble [900 × 4] (S3: tbl_df/tbl/data.frame)
 $ Var1: chr [1:900] "a" "a" "a" "a" ...
 $ Var2: chr [1:900] "a" "a" "a" "a" ...
 $ Var3: chr [1:900] "t" "t" "t" "t" ...
 $ Var4: chr [1:900] "t" "v" "w" "x" ...

遍历数据集的行并应用函数

library(purrr)
pmap(parameter_dat, ~ Create(parameter1 = list(model = c(..1, ..2)),
                parameter2 = list(distribution = c(..3, ..4))))

数据

parameter1 <- c("a", "b", "c", "d", "e")
parameter2 <- c("x", "y", "z", "w", "t", "v")

【讨论】:

  • 该解决方案的唯一问题是它忽略了重复值的情况。例如我们可以有:model
  • @MiguelMoreira 我认为你还没有执行上面的行library(tidyr); parameter_dat &lt;- crossing(d1, d2)
  • @MiguelMoreira 如果你这样做,你会得到dim(parameter_dat) [1] 900 4的维度
  • 谢谢!!工作得很好,只需要在 parameter_dat 中将因子转换为字符。
  • @MiguelMoreira 你不需要这些,因为expand.grid 可以返回字符列,如果使用stringsAsFactors = FALSE(默认情况下它返回 TRUE),即我们不需要额外的代码,当我们可以从根本上解决问题
猜你喜欢
  • 1970-01-01
  • 2019-10-07
  • 2013-12-19
  • 1970-01-01
  • 1970-01-01
  • 2017-12-28
  • 1970-01-01
  • 1970-01-01
  • 2013-11-21
相关资源
最近更新 更多