使用 NSE 在函数中订购条形图?
Ordering bar chart in function using NSE?
我目前正在尝试在 R 中订购条形图。该图是在函数中创建的,使用传递的变量来选择列。这是基本功能:
plotting <- function(column_to_use) {
ggplot(iris, aes(x = Sepal.Length, ))+
aes_string(y = column_to_use)+
geom_col()
}
plotting("Species")
这产生了正确的情节,但我仍然必须订购它。我已经尝试了 base-R 重新排序和 forcats fct_reorder()。代码差异以粗体显示。
# reorder
plotting <- function(column_to_use) {
ggplot(iris, aes(x = Sepal.Length, ))+
aes_string(y = reorder(iris[column_to_use],Sepal.Width))+
geom_col()
}
plotting("Species")
> Error in tapply(X = X, INDEX = x, FUN = FUN, ...) :
object 'Sepal.Width' not found
我正在使用 aes_string 使用非标准评估和数字转换变量列名称,这在重新排序中不起作用。遗憾的是,没有可用的 reorder_ 对应物。
# fct_reorder
plotting <- function(column_to_use) {
iris %>%
fct_reorder(iris[column_to_use],Sepal.Width) %>%
ggplot( aes(x = Sepal.Length))+
aes_string(y = column_to_use)+
geom_col()
}
plotting("Species")
> Error: `f` must be a factor (or character vector).
获得 Sepal.Width 订购的金条有哪些更好的选择?
aes_string
已被软弃用。尝试使用 .data
:
library(ggplot2)
plotting <- function(column_to_use) {
ggplot(iris, aes(x = Sepal.Length,
y = reorder(.data[[column_to_use]], Sepal.Width)))+
geom_col()
}
plotting("Species")
我们可以转换为 sym
bol 并用 !!
求值。它可以接受带引号和不带引号的输入
library(ggplot2)
plotting <- function(column_to_use) {
ggplot(iris, aes(x = Sepal.Length,
y = reorder(!! ensym(column_to_use), Sepal.Width)))+
geom_col()
}
plotting("Species")
plotting(Species)
我目前正在尝试在 R 中订购条形图。该图是在函数中创建的,使用传递的变量来选择列。这是基本功能:
plotting <- function(column_to_use) {
ggplot(iris, aes(x = Sepal.Length, ))+
aes_string(y = column_to_use)+
geom_col()
}
plotting("Species")
这产生了正确的情节,但我仍然必须订购它。我已经尝试了 base-R 重新排序和 forcats fct_reorder()。代码差异以粗体显示。
# reorder
plotting <- function(column_to_use) {
ggplot(iris, aes(x = Sepal.Length, ))+
aes_string(y = reorder(iris[column_to_use],Sepal.Width))+
geom_col()
}
plotting("Species")
> Error in tapply(X = X, INDEX = x, FUN = FUN, ...) :
object 'Sepal.Width' not found
我正在使用 aes_string 使用非标准评估和数字转换变量列名称,这在重新排序中不起作用。遗憾的是,没有可用的 reorder_ 对应物。
# fct_reorder
plotting <- function(column_to_use) {
iris %>%
fct_reorder(iris[column_to_use],Sepal.Width) %>%
ggplot( aes(x = Sepal.Length))+
aes_string(y = column_to_use)+
geom_col()
}
plotting("Species")
> Error: `f` must be a factor (or character vector).
获得 Sepal.Width 订购的金条有哪些更好的选择?
aes_string
已被软弃用。尝试使用 .data
:
library(ggplot2)
plotting <- function(column_to_use) {
ggplot(iris, aes(x = Sepal.Length,
y = reorder(.data[[column_to_use]], Sepal.Width)))+
geom_col()
}
plotting("Species")
我们可以转换为 sym
bol 并用 !!
求值。它可以接受带引号和不带引号的输入
library(ggplot2)
plotting <- function(column_to_use) {
ggplot(iris, aes(x = Sepal.Length,
y = reorder(!! ensym(column_to_use), Sepal.Width)))+
geom_col()
}
plotting("Species")
plotting(Species)