与之前的问题类似。我收到一条错误消息说"数据错误[,j]:下标超出范围"我无法理解为什么。
我只是试图获取给定矩阵中所有向量的乘积并存储在三维数组中,以测试多元回归中交互项的重要性。我提供了一段示例代码,非常感谢任何帮助。
a <- array( 1 , c( 3 ,1 ) )
b <- array( 2 , c( 3 ,1 ) )
d <- array( 3 , c( 3 ,1 ) )
Data <- array( c( a , b , d ) , c( 3 , 3 ) )
#
Sdata <- array( dim( Data ) , c( 2 , 1 ) )
Q <- ( Sdata[ 2 , 1 ] * ( Sdata[ 2 , 1 ] - 1 ) ) / 2
#
Combos <- array( 0 , c( Sdata[ 1 , 1 ] , Sdata[ 2 , 1 ] , Sdata[ 2 , 1 ] - 1 ) )
#
Scombos <- array( dim( Combos ) , c( 3 , 1 ) )
#
for( k in 1 : Scombos[ 2 , 1 ] - 1 ){
for( j in k + 1 : Scombos[ 2 , 1 ] ){
Combos[ , j , k ] <- Data[ , j ] * Data[ , k ]
}
}
答案 0 :(得分:1)
@Seth是正确的,你应该使用lm(...)
的公式接口来生成交互术语。但是既然你问如何成对地创建列的每个可能的产品,这是一种方式。
df <- data.frame(Data)
comb <- data.frame(combn(colnames(df),2),stringsAsFactors=F)
result <- do.call(cbind,lapply(comb,function(x)df[,x[1]]*df[,x[2]]))
colnames(result) <- sapply(comb,paste,collapse=".")
result
# X1.X2 X1.X3 X2.X3
# [1,] 2 3 6
# [2,] 2 3 6
# [3,] 2 3 6