我甚至不确定如何给这个更好,而不是明显重复类型的标题,但我认为这是关于expand.grid的另一个问题。
我有一个变量列表,我需要一个data.frame或每个可能组合的列表来提供一些序数回归。
列表:
> indVars <- as.list(c("T.P","T.M","T.S","E"))
期望的输出:
> out List of (?)
: "T.P"
: "T.M"
: "T.S"
: "E"
: "T.P" "T.M"
: "T.P" "T.S"
: "T.P" "E"
.
.
.
: "T.P" "T.M" "T.S" "E"
尝试:
expand.grid(indVars)
提供一行
> expand.grid(indVars)
Var1 Var2 Var3 Var4
1 T.P T.M T.S E
expand.grid(indVars,indVars)
提供了所有两个变量组合中的16行但不执行3或4个 AND 其中indVars[i]==indVars[i]
(因此您得到的行像
> expand.grid(indVars,indVars)[1,]
Var1 Var2
1 T.P T.P
逻辑说expand.grid(indVars,indVars,indVars,indVars)
给出了所有组合(其中256个),但最终你得到了具有相同indVar的多个实例的行。例如:
> expand.grid(indVars,indVars,indVars,indVars)[241,]
Var1 Var2 Var3 Var4
241 T.P T.P E E
请求:有人可以指出如何将这4个变量列表扩展为1,2,3和4的每个组合,没有重复项吗?
答案 0 :(得分:3)
这可能是一个XY问题,并且有一个更好的方法来进行序数回归。
我怀疑订单无关紧要。使用combn
:
res <- lapply(seq_along(indVars), combn, x = indVars, simplify = FALSE)
unlist(res, FALSE)
# [[1]]
# [1] "T.P"
#
# [[2]]
# [1] "T.M"
#
# [[3]]
# [1] "T.S"
#
# [[4]]
# [1] "E"
#
# [[5]]
# [1] "T.P" "T.M"
#
# [[6]]
# [1] "T.P" "T.S"
#
# [[7]]
# [1] "T.P" "E"
#
# [[8]]
# [1] "T.M" "T.S"
#
# [[9]]
# [1] "T.M" "E"
#
# [[10]]
# [1] "T.S" "E"
#
# [[11]]
# [1] "T.P" "T.M" "T.S"
#
# [[12]]
# [1] "T.P" "T.M" "E"
#
# [[13]]
# [1] "T.P" "T.S" "E"
#
# [[14]]
# [1] "T.M" "T.S" "E"
#
# [[15]]
# [1] "T.P" "T.M" "T.S" "E"