在我的设置中我有以下变量:
loc <- c('anf', 'iqq', 'stg', 'ccp', 'coy', 'puq')
subDirs <- list.dirs(full.names = FALSE)
在我提取子目录名称的当前目录中,我有一些子目录,其中我感兴趣的是我处理的数据。但是还有一些其他子目录我无法删除,因为它们包含其他重要文件。我感兴趣的子目录具有特殊性,每个人都以“代码”开头,可以是:anf,iqq,stg,ccp,coy,puq。因此,我想在子目录名称的前3个字符中提取包含这些代码的子目录名称。
for (k in 1:length(subDirs)){
if (!substr(subDirs[k], 1, 3) %in% loc & !is.na(subDirs[k])){
subDirs <- subDirs[subDirs != subDirs[k]]
}
}
例如,我有
[1] "" "anf_b2_results" "anf_c1_results" "anf_c2_results" "anf_c3_results"
[6] "anf_e1_results" "anf_e2_results" "iqq_b2_results" "iqq_e1_results" "iqq_e2_results"
[11] "poi_library" "stg_b2_results" "stg_e1_results" "stg_e2_results"
我想:
[1] "anf_b2_results" "anf_c1_results" "anf_c2_results" "anf_c3_results" "anf_e1_results"
[6] "anf_e2_results" "iqq_b2_results" "iqq_e1_results" "iqq_e2_results" "stg_b2_results"
[11] "stg_e1_results" "stg_e2_results"
我这样做是为了提取我感兴趣的名字,但是有更好的(有效的,更容易的)方式吗?我觉得我所做的是太多硬编码,我想要一个高效的代码,因为之后会有很多子目录。
最好的问候
答案 0 :(得分:0)
您不需要任何for
循环。 substr
是矢量化的。只是做:
subDirs[substr(subDirs, 1, 3) %in% loc]
# [1] "anf_b2_results" "anf_c1_results" "anf_c2_results" "anf_c3_results" "anf_e1_results"
# [6] "anf_e2_results" "iqq_b2_results" "iqq_e1_results" "iqq_e2_results" "stg_b2_results"
# [11] "stg_e1_results" "stg_e2_results"