r - 如何创建可重用的plot_ly函数?

标签 r function plotly

我正在查看 tidytuesday 的数据集,可在此处获取:

video_games <- readr::read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-07-30/video_games.csv")

我编写此代码是为了创建一个水平条形图,按降序排列。

video_games %>% 
  top_n(10, metascore) %>% 
  arrange(desc(metascore)) %>% 
  plot_ly(x = ~metascore, y = ~fct_reorder(game, metascore), 
          type = "bar") %>% 
  layout(xaxis = list(title = "Metascore"),
         yaxis = list(title = ""))

我想重用具有多个变量的代码,而无需复制和粘贴,因此我为要绘制的变量创建了一个包含 2 个条目的函数。 (我省略了布局部分。如果有一种方法可以自动重新标记函数内的绘图,那就太酷了。)

video_games_ranking_plot <- function(A, B) {
  top_n(10, A) %>% 
    arrange(desc(A)) %>% 
    plot_ly(x = ~A, y = ~fct_reorder(B, A), 
            type = "bar")
}

当我运行该函数时

video_games %>%           
video_games_ranking_plot(metascore, game)

...我收到错误消息 video_games_ranking_plot(., metascore, game) 中的错误: 未使用的参数(游戏)

有谁知道为什么吗?

最佳答案

问题的根源似乎是您将一种类型的相同参数metascore, game传递给接受以下参数的自定义函数的非常不同的元素不同类型:

  1. top_n(10, 元分数)
  2. 排列(desc(metascore)
  3. plot_ly(x = ~metascore, y = ~fct_reorder(游戏, metascore)

事实上,您还使用管道传递列 ase 参数,这也会带来某些挑战。我还没有时间构建完整的解决方案,但希望这将帮助您获得完整的解决方案:

plotly :

enter image description here

代码:

library(dplyr)
library(forcats)
library(plotly)

# get data
video_games <- readr::read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-07-30/video_games.csv")

data <- video_games

# custom function
video_games_ranking_plot <- function(data, topn, col_top, col_ord){

  # select and arrand data
  df <- data %>% top_n(topn, {{col_top}}) %>% arrange(desc({{col_ord}})) #%>%

  col_top_name <- deparse(substitute(col_top))
  col_ord_name <- deparse(substitute(col_ord))
  df2<- df[c(col_top_name, col_ord_name)]

  # build plotly pliot
  p <- plot_ly(x = df2[[col_top_name]], y = df2[[col_ord_name]], type = "bar")


}

plt <- video_games_ranking_plot(data=video_games, topn=5, metascore, game)  

plt

~fct_reorder(game, metascore) 部分仍然存在问题。 我必须自己提出一个问题才能走到这一步。看看用户 Ronak Shah 对帖子 How to pass a dataframe column as an argument in a function using piping? 的回答了解有关如何将参数传递给管道函数的更多信息。

希望这会有所帮助!

关于r - 如何创建可重用的plot_ly函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59764372/

相关文章:

c++ - 试图引用已删除的函数(未引用已创建的函数)

C++:在另一个函数中声明一个函数有什么用?

python - 如何将包含相同参数子集且值相同的 2 个函数合并为 1 个函数?

python - 单击破折号中的按钮后从数据框中填充破折号表

r - 从 kernlab 调整 ksvm

rgdal 包安装

r - 无法在 ADLA 中安装派对包 (R)

r - 如何在包内的函数中提供非 R 文件?

python - 如何使用整数变量作为函数的参数?

python - 如何根据名称选择 pandas 中的列?