从 expand.grid 内的列表中分配 R 中的变量名称

Assigning variable names in R from a list within expand.grid

我正在尝试在 R 的 expand.grid 函数中自动生成变量名(都遵循相同的命名模式 x1、x2、...)。

这是我的问题的缩影版: 我有一个包含 25 个变量名称的列表,以及一个包含 25 列和 5 行的矩阵。现在我必须将列表中的名称分配给相应的矩阵列,但这必须在 expand.grid 内完成(这是因为我的最终目标是生成数据网格,但我还需要变量名称进一步加工)。 这是一些代码:

## Create list holding 25 variable names- I actually have way more than 25
ln <- vector(mode="list", length=25)
for (i in 1:25){
  
  ln[[i]]<-paste("x", i, sep="")
}
ln
ln[[1]]
## Make matrix dataset without variable/column names
sampl<- matrix(rnorm(25) , nrow = 5, ncol=25)
sampl

require(MASS)
## WHAT I WANT
## Automatically assign variable names from list ln within expand.grid
test <- expand.grid(x1=seq(min(sampl[,1]-1), max(sampl[,1]+1),
                          by=0.1),
                    x2=seq(min(sampl[,2]-1), max(sampl[,2]+1), 
                          by=0.1),
                    x3=seq(min(sampl[,3]-1), max(sampl[,3]+1),
                          by=0.1),
                     \...and so on ...\
                    x25=seq(min(sampl[,25]-1), max(sampl[,25]+1), 
                          by=0.1)
                   )

或者,是否可以从矩阵中生成我想要的数据网格,然后在不使用 expand.grid 的情况下从列表中分配名称?

我们可以使用 apply 遍历列,通过 0.1 获得 minmax 之间的 sequence,设置名称list 与 'ln' 的值并应用 expand.grid (需要注意的是,组合的数量会很大)

test2 <- expand.grid(setNames(apply(sampl, 2, \(x) seq(min(x-1), 
       max(x + 1), by = 0.1)), unlist(ln)))