R语言如何用循环按样本名拆分列表并生成对应子集对象
问题原因
你当前代码的报错是因为将print()函数放在了赋值符号左侧,R会误判为你要给print()的返回值赋值,自然不存在print<-这类赋值函数,所以触发报错。
你之前使用assign()得到带反引号包裹的对象,是因为生成的对象名包含空格、特殊符号等不符合R变量命名规则的内容,只要使用合法的变量名就不会出现该问题。
正确实现代码
方法1:循环生成独立对象(符合你最初的需求)
for (i in 1:18) { # 生成合法的对象名:sample.1、sample.2 ... sample.18 target_obj_name <- paste0("sample.", i) # 匹配对应样本的5个文件名 sample_files <- sample.names.dilutions[grep(paste0("Sample ", i, "_"), sample.names.dilutions)] # 赋值到当前工作环境 assign(target_obj_name, sample_files, envir = .GlobalEnv) }
运行完成后,直接输入sample.1即可调取第一个样本对应的5个文件名,不会出现反引号包裹的问题。
方法2:存入统一列表(更推荐,方便后续批量处理)
如果不需要18个独立的全局对象,更建议将所有样本的文件名存在一个命名列表中,后续批量操作更易维护:
# 批量匹配所有样本的文件名 sample_file_list <- lapply(1:18, function(i) { sample.names.dilutions[grep(paste0("Sample ", i, "_"), sample.names.dilutions)] }) # 给列表元素命名 names(sample_file_list) <- paste0("sample.", 1:18)
使用时通过sample_file_list$sample.1即可调取对应样本的文件名。
内容的提问来源于stack exchange,提问作者carolina671
相关产品推荐
相关产品推荐

