【发布时间】:2020-06-12 00:00:41
【问题描述】:
我正在尝试将包含 52 个组件的列表转换为每个组件的数据框。 不使用 for 循环会看起来像这样,很乏味:
df1 = as.data.frame(list[1])
df2 = as.data.frame(list[2])
df3 = as.data.frame(list[3])
.
.
.
df50 = as.data.frame(list[50])
如何使用 for 循环实现这一点?我的尝试:
for (i in seq_along(list)) {
noquote(paste0("df", i)) = as.data.frame(list[i])
}
Error: target of assignment expands to non-language objec
我想我必须邀请assign。
【问题讨论】:
-
使用
assign而不是noquote即assign(paste0("df", i), value = list[[i]])话虽如此,不推荐。您可以将 data.frames 保存在单个list中,而不是全局环境中的 50 个对象 -
如果您将它们列在一个列表中,您的生活会轻松很多。你可以用
df <- lapply(list, as.data.frame)把它们做成data.frames,然后用df[[1]]、df[[2]]等提取。 -
最好保存在命名列表中:
dfs <- setNames(lapply(mylist, as.data.frame), paste0("df", seq_along(mylist)))提取为dfs$df1、dfs$df2等