R语言 如何从循环中向量创建对象?

k4emjkb1  于 2023-07-31  发布在  其他
关注(0)|答案(3)|浏览(106)

我想从一个字符向量创建一个对象。举例来说:

v <- c("ind1_2015", "ind1_2016", "ind1_2017")

for (ind in v) {
 ind <- readRDS(paste0(ind, ".RDS"))
}

字符串
所以在最后,我希望有3个 Dataframe ,每个 Dataframe 称为ind1_2015,ind1_2016和ind1_2017。我如何才能做到这一点?

jxct1oxe

jxct1oxe1#

在R中,这与Python不同或类似。初始化一个命名列表,但循环遍历(数字)索引。

for (i in seq_along(v)) {
  ind[[i]] <- readRDS(paste0(v[[i]], ".rds"))
}
ind
# $ind1_2015
#   X1 X2 X3 X4
# 1  1  4  7 10
# 2  2  5  8 11
# 3  3  6  9 12
# 
# $ind1_2016
#   X1 X2 X3 X4
# 1  1  4  7 10
# 2  2  5  8 11
# 3  3  6  9 12
# 
# $ind1_2017
#   X1 X2 X3 X4
# 1  1  4  7 10
# 2  2  5  8 11
# 3  3  6  9 12

字符串
或者使用lapply

ind <- lapply(setNames(v, v), \(x) readRDS(paste0(x, '.rds')))


要“解包”列表,请使用list2env(ind, .GlobalEnv)获取单个 Dataframe (不一定推荐)。

  • 数据:*
ind1_2015 <- ind1_2016 <- ind1_2017 <- data.frame(matrix(1:12, 3, 4))
lapply(c("ind1_2015", "ind1_2016", "ind1_2017"), \(x) saveRDS(get(x), paste0(x, '.rds')))

z18hc3ub

z18hc3ub2#

可以使用assign

v <- c("ind1_2015", "ind1_2016", "ind1_2017")

for(ind in v) {
        
        assign(ind, data.frame(v = ind))
}

字符串

q35jwt9p

q35jwt9p3#

这里可以使用assign,在本例中,生成三个 Dataframe ,分别称为df_ind1_2015df_ind1_2016df_ind1_2017

v <- c("ind1_2015", "ind1_2016", "ind1_2017")

for(ind in v) {
  value <- readRDS(paste0(ind, ".RDS"))
  assign(x = paste0("df_", ind), value = value)
}

字符串

相关问题