假设一个表格如下:
X =
col1 col2 col3
row1 "A" "0" "1"
row2 "B" "2" "NA"
row3 "C" "1" "2"
我使用以下代码选择两行的组合:
pair <- apply(X, 2, combn, m=2)
这将返回以下格式的矩阵:
pair =
[,1] [,2] [,3]
[1,] "A" "0" "1"
[2,] "B" "2" NA
[3,] "A" "0" "1"
[4,] "C" "1" "2"
[5,] "B" "2" NA
[6,] "C" "1" "2"
我希望迭代一对,一次取两行,即首先分离[1,]和[2,],然后[3,]和[4,]和最后,[5,]和[6] ,。然后将这些行作为参数传递给回归模型,即lm(Y~row [i] * row [j])。
我正在处理大型数据集。任何人都可以建议如何一次迭代两行矩阵,将这些行分配给变量并作为参数传递给函数吗?
谢谢, S; - )
答案 0 :(得分:4)
没有必要像这样乘以矩阵的行,如果你有一个大的数据集,它可能会有问题。而只是为每个实例选择相关的行。但事先创建选择很方便,也许这样:
xselect <- combn(1:nrow(X),2)
用您的数据说明(假设您只使用第2列和第3列):
X <- matrix(c("A", "B", "C", 0,2,1,1,NA,2),3,3)
Y <- rnorm(2, 4, 2)
for (i in 1:ncol(xselect))
{
x1 <- as.numeric(X[xselect[1,i], c(2,3)])
x2 <- as.numeric(X[xselect[2,i], c(2,3)])
print(lm(Y ~ x1 * x2))
}
答案 1 :(得分:1)
我不确定你要对线性模型做些什么,但要迭代X
,一次一对行,为每一对做一个因子,然后使用{ {1}}
by
其中fac <- as.factor(sort(rep(1:(nrow(X)/2), 2)))
by(X, fac, FUN)
是您要在X中的行对上应用的任何函数。