我正在编写一个函数来重新排序 tibble 中的列,以便 ggplot 以有意义的顺序而不是按字母顺序绘制它们。这个函数是我正在尝试编写的一个包的一部分,我允许 tibble 使用不同的列名。我想做这样的事情:
reorder_samples <- function(tibble, col_name, fact_list)
{
#where col_name is a string which is the title of the column to be factored
#and fact_list is a concatenated list of strings in the order I want for the factors
factored_tibble <- tibble %>%
mutate_at(col_name, as.factor) %>%
mutate(!!col_name := fct_relevel(col_name, fact_list)
}
但是,当我调用此函数时,它给了我一条警告消息:“1:'f': 中的未知级别”,然后它给出了我的 fact_list 中的两个项目。这些是列中仅有的两个字符串。此外,它确实给了我一个 tibble,其中列的内容已替换为 col_name 的字符串。
我花了很长时间才弄清楚如何使用函数中提供的参数进行变异,但我无法弄清楚 forcats 的语法应该是什么,所以它意识到我指的是列名。如果我将列名直接替换到代码中,它可以工作:
reorder_samples <- function(tibble, col_name, fact_list)
{
factored_tibble <- tibble %>%
mutate_at(col_name, as.factor) %>%
mutate(!!col_name := fct_relevel(Temp, fact_list)
}
我也尝试使用 base r 函数因子,但没有运气,因为我也无法让因子接受参数。
希望这很清楚,并提前感谢您的任何建议。