直奔主题。as1_list
我尝试使用name()和paste()在列表中命名data.frames,但在分配它们时遇到了问题
num_fu = c('1','2','3','4','5','6','7','8','9')
as <- data.frame()
for (i in num_fu){
assign(paste0("flnames", i), list.files(path = paste0("C:/Users/thepr/Documents/data/as", i), pattern = "\\.csv", full.names = TRUE))
assign(paste0("as", i, "_list"), lapply(get(paste0("flnames", i)),
function(x){base::as.data.frame(read.csv(x))}))
nm <- gsub(".csv", "", basename(get(paste0("flnames", i)))) %>% str_sub(., 1,6)
nm
返回
nm 1“as1_01”“as1_02”“as1_03”“as1_04”“as1_05”“as1_07”“as1_08”“as1_09”“as1_11”“as1_13”[11]“as1_14”“as1_15”“as1_99”
和names(as1_list)
返回
> names(as1_list)
NULL
我试着得到(paste 0...
names(get(paste0("as", i, "_list"))) <- nm
返回错误:名称错误(get(paste 0(“as”,i,“_list”))<- nm:赋值目标扩展为非语言对象
所以我试过了
names(eval(parse(text = paste0("as", i, "_list")))) <- nm
发生了这样的事名称错误(eval(parse(text = paste 0(“as”,i,“_list”)))<- nm:赋值目标扩展为非语言对象
我还尝试了使用上述两个代码的assign()函数。
assign(names(get(paste0("as", i, "_list"))), nm)
返回:assign(names(get(paste 0(“as”,i,“_list”))),nm)错误:第一个参数无效
和
assign(names(eval(parse(text = paste0("as", i, "_list")))), nm)
返回:assign(names(eval(parse(text = paste 0(“as”,i,“_list”)))),nm)错误:第一个参数无效
请帮帮我谢谢你。
2条答案
按热度按时间piwo6bdm1#
我了解到在
for
循环中使用assign()
通常是一个坏主意。只要学会使用R的矢量化特性,让它闪闪发光!
例如,考虑将
for
循环的结果存储在单个列表中。您仍然可以稍后将列表内容转换为单个对象:Unlist a list of dataframes我认为,你试图完成的是批量读取. csv文件并重命名它们。看看这里:How to import multiple .csv files at once?
g0czyy6m2#
正如您在评论中所指定的,下面将为您提供一个 Dataframe 列表,每个 Dataframe 都来自一个CSV文件(以“as”开头),并以文件名(不包括扩展名)命名:
注意使用
Map
来操作一个列表(在本例中是文件名的列表),并避免任何for
循环(在R中通常是一个好主意)。