【发布时间】:2018-08-13 08:55:36
【问题描述】:
我想针对通过“网格搜索”组合方法更改的数据测试简单线性回归模型的输出,以找到最佳数据准备。
假设我有 x 个测试变量,每个变量包含 n 行数据。 x 和 n 可能随不同的数据集而变化。我还有一个缩放向量 v,它的长度也会发生变化。
例如:
tbl <- read.table(text =
"Field1 Field2
100 200
150 180
200 160
280 250
300 300
300 250",
header = TRUE) #length(x) is 2 here
v <- c(0, 0.1, 0.2) # length(v) is 3
我想要做的是循环遍历(或“应用”?)缩放向量 v 组合的每个子集,并在每次迭代中测试我的模型。
换句话说,有效地循环遍历每个 x 的可能值:
Field 1 Field 2
0.0 0.0
0.1 0.0
0.2 0.0
0.0 0.1
0.1 0.1
0.2 0.1
0.0 0.2
0.1 0.2
0.2 0.2
在每次迭代中,按字段 1 的列中的值缩放字段 1,并按字段 2 的值缩放字段 2。我的缩放函数实际上是filter(tbl, v, method="recursive") (thanks!) - 所以在第一次迭代中我的数据框将保持不变(Field1 和 Field2 的 v=0),在第二次迭代中,字段 1 将使用参数 v 应用过滤函数= 0.1 但字段 2 将保持不变 (v=0) ... 组合 4 将保持字段 1 不变 (v = 0) 但字段 2 将应用参数 v = 0.1 的过滤器。
我可以通过嵌套循环来强制执行此操作,但是我将拥有不同数量的 x 变量(可能介于 1 和 10 之间),并且 v 的长度也可能会有所不同。写出 10 个嵌套循环感觉走错路了。
我可以创建这些可能组合的矩阵,然后以某种方式将它们应用于我的数据框吗?如果是这样,我不清楚如何执行此操作,我们将不胜感激!
非常感谢。
【问题讨论】:
-
我想你希望
expand.grid创造你的可能性 -
我想我可以从 plyr 包中生成组合矩阵:
expand.grid(rlply(length(x), v)。这给了我各种组合;但是如何应用这些组合呢?猜猜我可以在这个阶段循环吗? -
你可以直接使用apply。