从 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
获得 min
和 max
之间的 seq
uence,设置名称list
与 'ln' 的值并应用 expand.grid
(需要注意的是,组合的数量会很大)
test2 <- expand.grid(setNames(apply(sampl, 2, \(x) seq(min(x-1),
max(x + 1), by = 0.1)), unlist(ln)))
我正在尝试在 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
获得 min
和 max
之间的 seq
uence,设置名称list
与 'ln' 的值并应用 expand.grid
(需要注意的是,组合的数量会很大)
test2 <- expand.grid(setNames(apply(sampl, 2, \(x) seq(min(x-1),
max(x + 1), by = 0.1)), unlist(ln)))