在管道工中使用 dplyr::filter

问题描述

我有一个管道工 API,想返回一个基于 dplyr 过滤的值。我通常会在过滤中使用引号 (group == "a"),但我不知道在这里做什么。

library(plumber)

#* @apiTitle Test filtering

df <- data.frame(group = c("a","b","c"),var1 = c(3,1,2),var2 = c( 2,4,8))

#* Return one value
#* @param "my_group" My Group
#* @post /my_output

function(group) {

  df %>%
    filter(group == my_group) %>%
    select(var1)
}

解决方法

应该是这样的

#* Return one value
#* @param my_group My Group
#* @get /values
function(my_group) {
  df %>%
    filter(group == my_group) %>%
    select(var1)
}

然后您可以使用像 /values?my_group=a 这样的 URL。参数将通过字符串传递,因此您无需担心引号。如果你真的想拥有相同的变量名,你可以这样做

#* Return one value
#* @param group My Group
#* @get /values
function(group) {
  df %>%
    filter(.data$group == .env$group) %>%
    select(var1)
}

所以你有 /values?group=a

这些也适用于 POST 请求,只是更容易显示 GET URL。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...