【发布时间】:2021-09-07 05:44:06
【问题描述】:
我正在尝试对字符串中的数字进行排序:
library(gtools)
gtools::mixedsort("[20,12,30]", decreasing = FALSE)
返回相同的字符串:
"[20,12,30]"
预期输出:
"[12,20,30]"
我是否遗漏了mixedsort() 中的任何参数?
还有其他方法可以完成这项任务吗?
【问题讨论】:
我正在尝试对字符串中的数字进行排序:
library(gtools)
gtools::mixedsort("[20,12,30]", decreasing = FALSE)
返回相同的字符串:
"[20,12,30]"
预期输出:
"[12,20,30]"
我是否遗漏了mixedsort() 中的任何参数?
还有其他方法可以完成这项任务吗?
【问题讨论】:
我们可以提取元素,排序和粘贴
library(purrr)
library(stringr)
map_chr(str_extract_all("[20,12,30]", "\\d+"),
~ sprintf('[%s]', toString(sort(as.numeric(.x)))))
-输出
[1] "[12, 20, 30]"
或者在base R中,另一种选择是将[/]替换为(/),附加c、eval/parse以返回数字向量sort,然后用@987654329重构原始格式@
sprintf('[%s]', toString(sort(eval(parse(text =
paste0("c", chartr("[]", "()", "[20,12,30]")))))))
[1] "[12, 20, 30]"
另一种选择是使用reticulate,因为格式字符串是python 中的list 结构
library(reticulate)
py_run_string(paste0("a=", "[20,12,30]"))
sprintf('[%s]', toString(sort(py$a)))
[1] "[12, 20, 30]"
mixedsort/mixedorder 不在字符串内排序,而是跨字符串排序
【讨论】: