我在R中有一个栅格列表,每个元素对于names
属性都有不同的值。例如,当我执行(names(dems[[3]]))
时,结果是"srtm_sig0.9_iter100_viter50_nb_cv0"
。当我做(names(dems[[4]]))
时,结果是‘srtm_sig0.9_iter20_viter50_nb_cv0’。
现在我要做的是根据name属性的子字符串对列表进行排序。特别是*sig0.9_****_iter20*
之间的部分。因此,对于这两个例子,它将是iter100
和iter20
。
要模拟该列表,可以使用以下内容:
dems = vector("list", length = 5)
iters = seq(20, 100, 20)
for(i in seq_along(iters)){
dems[[i]] = paste0("xxxxxsig0.9_iter", iters[[i]], "_nbxxx")
}
set.seed(1)
dems = sample(dems)
发布于 2020-08-25 09:13:03
您可以使用"iter"
使用sub
提取数字,将其转换为数字,并将其转换为order
:
dems[order(as.numeric(sub('.*iter(\\d+).*', '\\1', unlist(dems))))]
#[[1]]
#[1] "xxxxxsig0.9_iter20_nbxxx"
#[[2]]
#[1] "xxxxxsig0.9_iter40_nbxxx"
#[[3]]
#[1] "xxxxxsig0.9_iter60_nbxxx"
#[[4]]
#[1] "xxxxxsig0.9_iter80_nbxxx"
#[[5]]
#[1] "xxxxxsig0.9_iter100_nbxxx"
或者直接使用gtools::mixedorder
/mixedsort
执行此操作:
dems[gtools::mixedorder(unlist(dems))]
https://stackoverflow.com/questions/63574272
复制相似问题