meeeeeeeeo
我尝试了下
sortmodel <- data.frame(
sort = c("asc","desc"),
colid = c("Sepal.Length","Species")
)
true_index <- order(c(iris[['Sepal.Length']],iris[['Species']]),decreasing = sortmodel$sort == "desc")
# 第一种
order_index1 <- do.call(
function(...) {order(..., decreasing = sortmodel$sort == "desc")},
lapply(sortmodel$colid, function(col) {iris[[col]]})
)
cat("正确?",all(true_index == order_index1))
# 第二种
ord_expr <- rlang::call2("order",
rlang::parse_expr(sprintf("c(%s)",paste0("iris[['",sortmodel$colid,"']]",collapse = ","))),
decreasing = sortmodel$sort == "desc")
order_index2 <- eval(ord_expr)
cat("正确?",all(true_index == order_index2))
第一种似乎不对,但是我也没看出哪里有问题,第二种自己写的,又感觉很凌乱。
输出如下:
正确? FALSE
正确? TRUE