【发布时间】:2018-03-22 15:26:11
【问题描述】:
我有一个data.frame 任意定义参数名称和序列边界:
dfParameterValues <- data.frame(ParameterName = character(), seqFrom = integer(), seqTo = integer(), seqBy = integer())
row1 <- data.frame(ParameterName = "parameterA", seqFrom = 1, seqTo = 2, seqBy = 1)
row2 <- data.frame(ParameterName = "parameterB", seqFrom = 5, seqTo = 7, seqBy = 1)
row3 <- data.frame(ParameterName = "parameterC", seqFrom = 10, seqTo = 11, seqBy = 1)
dfParameterValues <- rbind(dfParameterValues, row1)
dfParameterValues <- rbind(dfParameterValues, row2)
dfParameterValues <- rbind(dfParameterValues, row3)
我想使用这种方法创建一个基于唯一ParameterNames 的数量的 c 参数列网格,其中包含由seqFrom、seqTo 和seqBy。因此,结果看起来有点像这样,或者应该有如下内容:
ParameterA ParameterB ParameterC
1 5 10
1 5 11
1 6 10
1 6 11
1 7 10
1 7 11
2 5 10
2 5 11
2 6 10
2 6 11
2 7 10
2 7 11
编辑:请注意,参数名称及其编号是事先不知道的。 data.frame 来自其他地方,所以我不能使用标准的静态 expand.grid 方法,需要一个灵活的函数,它可以基于任何数据框创建扩展网格,其中包含 ParameterName、seqFrom、seqTo、seqBy 列。
我一直在玩 for 循环(一开始很糟糕),但它并没有让我想到任何优雅的想法。我似乎也找不到通过使用 tidyr 来得出结果的方法,而无需先单独构建序列。你有什么优雅的方法吗?
将其扩展到不仅包括数字序列,还包括向量/字符集/其他因素,这是一种奖励。
非常感谢!
【问题讨论】:
-
试试
paramA <- 1:2; paramB <- 5:7; paramC <- 10:11; expand.grid(paramA, paramB, paramC) -
谢谢,CPak;也许我应该更清楚地指出,参数名称及其编号是事先不知道的。 data.frame 来自其他地方,所以我不能使用静态 expand.grid 方法。我会相应地编辑我的帖子。
-
我正在寻找的解决方案可能看起来像这样(虽然这里是一种非常高级的愚蠢方法):
lapply(originalDataFrame, expand.grid, lapply(???, seq))