使用矢量名称自动创建多个数据框或矢量
Create multiple dataframes or vectors by automation with vector names
简单地说,在这个例子中,我有一个有3个方向的向量:
向量 <- c("South", "North", "East")
我需要为每个方向创建一个新向量,并在每个方向后命名 3 个新向量。所以我希望下面的逻辑起作用:
for(i in 1:length(向量){
data.vector[i] <- c(1:3)
它会创建 3 个向量(data.South、data.North 和 data.East),所有 3 个都等于 (1,2,3)。
不幸的是,这不起作用,因为矢量引用 vector[1] 被 R 读取为不存在的数据帧:
data.vector[1] <- "Position" 中的错误:找不到对象 'data.vector'
有没有一种方法可以对其进行编码并创建 3 个新向量?
非常感谢!
一种与您要求的方式非常相似的方法是 assign
:
for(i in seq_along(vector)){
assign(vector[[i]],data.frame())
}
ls()
[1] "East" "North" "South"
另一种方法是创建一个列表对象,其中每个元素都是一个 data.frame
,如下所示:
lapply(vector, function(x){setNames(data.frame(x),x)})
[[1]]
South
1 South
[[2]]
North
1 North
[[3]]
East
1 East
如果您想创建名称在 vector
中的空数据框,一种方法是:
list_data <- setNames(replicate(length(vector), data.frame()),
paste0('data.', vector))
list2env(list_data, .GlobalEnv)
但是,请考虑使用列表 (list_data
),因为它们更易于管理并且不会污染全球环境。
简单地说,在这个例子中,我有一个有3个方向的向量:
向量 <- c("South", "North", "East")
我需要为每个方向创建一个新向量,并在每个方向后命名 3 个新向量。所以我希望下面的逻辑起作用:
for(i in 1:length(向量){ data.vector[i] <- c(1:3)
它会创建 3 个向量(data.South、data.North 和 data.East),所有 3 个都等于 (1,2,3)。
不幸的是,这不起作用,因为矢量引用 vector[1] 被 R 读取为不存在的数据帧:
data.vector[1] <- "Position" 中的错误:找不到对象 'data.vector'
有没有一种方法可以对其进行编码并创建 3 个新向量?
非常感谢!
一种与您要求的方式非常相似的方法是 assign
:
for(i in seq_along(vector)){
assign(vector[[i]],data.frame())
}
ls()
[1] "East" "North" "South"
另一种方法是创建一个列表对象,其中每个元素都是一个 data.frame
,如下所示:
lapply(vector, function(x){setNames(data.frame(x),x)})
[[1]]
South
1 South
[[2]]
North
1 North
[[3]]
East
1 East
如果您想创建名称在 vector
中的空数据框,一种方法是:
list_data <- setNames(replicate(length(vector), data.frame()),
paste0('data.', vector))
list2env(list_data, .GlobalEnv)
但是,请考虑使用列表 (list_data
),因为它们更易于管理并且不会污染全球环境。