使用 R 的 Plumber - 创建 GET 端点来托管 CSV 格式的数据而不是 JSON

2023-12-23

我认为这是 R 管道工库的一个很好的快速演示,但主要是我正在努力以 csv 格式提供数据

我正在使用 R 的管道工包来托管我的一些体育数据的 API 端点。目前,我有一些数据可以获取我正在尝试提供的 MLB 棒球队的获胜总数。使用水管工,我设置了以下两个脚本:

设置API.R:使用两个 GET 端点设置我的 API:

library(plumber)
library(jsonlite)

# load in some test sports data to host
mydata = structure(list(Team = structure(c(8L, 20L, 7L, 28L, 2L, 30L, 
23L, 1L, 6L, 19L), .Label = c("Angels", "Astros", "Athletics", 
"Blue Jays", "Braves", "Brewers", "Cardinals", "Cubs", "Diamondbacks", 
"Dodgers", "Giants", "Indians", "Mariners", "Marlins", "Mets", 
"Nationals", "Orioles", "Padres", "Phillies", "Pirates", "Rangers", 
"Rays", "Red Sox", "Reds", "Rockies", "Royals", "Tigers", "Twins", 
"White Sox", "Yankees"), class = "factor"), GamesPlayed = c(162L, 
162L, 162L, 162L, 162L, 162L, 162L, 162L, 162L, 162L), CurrentWins = c(92L, 
75L, 83L, 85L, 101L, 91L, 93L, 80L, 86L, 66L)), .Names = c("Team", 
"GamesPlayed", "CurrentWins"), row.names = c(NA, 10L), class = "data.frame")

# create a GET request for shareprices (in JSON format)
#* @get /shareprices_json
getSPs <- function(){ 
  return(toJSON(mydata))
}

# create a GET request for MLB shareprices (in CSV format)
#* @get /shareprices_csv
csvSPs <- function(){
  return(mydata)
}

# run both functions (i think needed for the endpoints to work)   
getSPs()
csvSPs()

RunAPI.R:plumb的setupAPI.R,获取本地托管的端点

library(plumber)
r <- plumb("setupAPI.R") 
r$run(port=8000)

. . .

在控制台中运行 RunAPI.R 代码后,当我转到端点时,我的http://127.0.0.1:8000/shareprices_csv http://127.0.0.1:8000/shareprices_csv端点显然返回一个 JSON 对象,而我的http://127.0.0.1:8000/shareprices_json http://127.0.0.1:8000/shareprices_json端点似乎奇怪地返回长度为 1 的 JSON,字符串中的 JSON 作为返回 JSON 中的唯一元素。

简而言之,我现在可以看到,我应该简单地返回数据帧,而不是返回 JSON(数据帧),以获得端点主机 JSON 格式的数据,however我仍然不知道如何以 CSV 格式提供这些数据。这在水管工中可能吗? setupAPI.R 函数中的 return 语句应该是什么样子?任何帮助表示赞赏!


如果对任何人有帮助,只需发布​​此答案即可!

Jeff 的响应效果非常好,但当您必须返回一个大的 CSV 文件时,响应会变得非常慢。我在处理 22 MB 文件时遇到了问题。

如果您之前将 CSV 写入磁盘,则更快的解决方案是使用include_file函数(文档here https://www.rdocumentation.org/packages/plumber/versions/0.4.4/topics/include_file):

举个例子:

#* @get /iris_csv
getIrisCsv <- function(req, res) {
    filename <- file.path(tempdir(), "iris.csv")
    write.csv(iris, filename, row.names = FALSE)
    include_file(filename, res, "text/csv")
}

因此,这取决于您的用例:

  • 如果您返回一个小 csv 并且不想将其写入磁盘:使用 Jeff 的解决方案
  • 如果您的 CSV 是中型或大型 (> 2MB) 或者您已将其存储在磁盘上:使用include_file解决方案

希望能帮助到你!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 R 的 Plumber - 创建 GET 端点来托管 CSV 格式的数据而不是 JSON 的相关文章

随机推荐

  • Meteor:自定义允许和拒绝规则的错误消息

    我正在寻求标准化 Meteor 中允许和拒绝规则的错误消息 我不想在客户端的回调中定义错误 而是希望服务器以正确的错误消息进行响应 这样我只需定义它们一次 来自允许 拒绝的文档 如果函数认为应该允许该操作 则它们应该返回 true 否则它们
  • Solr 搜索字段中的值数组

    我是 Solr 搜索的新手 任何人都可以帮助我解决我的问题 我有值数组 我想将其添加到 solr 查询中 例如 query gt setQuery field 1 2 5 当我执行此操作时 我收到此错误消息 org apache solr
  • 使用文本和值填充 DropDownList

    我在 ASP NET Webforms 中有一个下拉列表 我想计算某一年是多少年前 在第一行中 2002 是当前年份 9 并且必须是值 而 9 是 visibel 文本 显示 2002 年是多少年前 2002 9 2003 8 2004 7
  • 是否可以阻止 PWA 仅在特定路由上使用缓存?

    自从我将 React 应用程序配置为 PWA 以来 我开始遇到谷歌身份验证问题 当用户单击 使用 Google 登录 时 应该会访问此端点 route GET api users auth google desc Authenticate
  • 在颤振中我如何检查位置是否启用?

    当用户输入没有启用位置的谷歌地图页面时 我遇到问题 地图不会更新 所以我想检查用户是否事先启用了位置 所以我需要一个函数 如果启用了位置 则返回 true 如果没有启用 则返回 false use 权限处理插件 https pub dev
  • 如何在 Dart 中查找集合的所有子集?

    我需要获取数组的所有可能的子集 假设我有这个
  • 为什么我在 Google 地图 Android API 上收到签名无效的信息?

    我的应用程序在 5 1 版本的设备上可以正常进行位置更新 从那时起 我做了两件事 生成签名的 apk 尝试将其部署到 6 0 设备 我不知道发生了什么 但现在 google api 即使在我原来的设备上也无法工作 这是错误日志的一部分 我认
  • 自定义 UISlider

    如何自定义UISlider 更改样式 背景 你可以通过this http www raywenderlich com 4344 user interface customization in ios 5自定义控件的教程 要自定义 UISli
  • 触发一次后关闭事件监听器

    我有一个脚本可以触发一个提供免费下载的弹出框 当用户的鼠标离开页面时它会触发 显然不适用于移动设备 我已经有一个可行的解决方案 在我的脚本中 我设置了一个 cookie 来停用脚本 30 分钟 并且该部分有效 如果我刷新页面 弹出窗口不会再
  • GraphQL:成功突变后如何发出警告?

    让我们想象一下我有一个createPost插入新帖子的突变 在典型的应用程序中 该突变可以 成功 返回一个Post 失败 抛出错误 我使用阿波罗错误 https github com thebigredgeek apollo errors来
  • 如何在 AWS Lambda 中缓存多个 AWS Parameter Store 值?

    我想限制在 AWS Lambda 中调用 AWS Parameter Store 的次数 使用全局变量 我在第一次调用 Parameter Store 时缓存 Parameter Store 值 main py import os impo
  • Highcharts x 轴日期时间的最大间隔?

    我有一张每日图表 涵盖 00 00 到 23 59 但对于实时数据 假设当前是上午 9 点 默认情况下它会将图表从 00 00 拉伸到 09 00 这对我来说看起来不太好 我想要的是当天 23 59 处的 x 轴最大值 因此它将把 09 0
  • 检查文件是否正在使用 VBS

    我想制作一个小的 VBS 脚本来告诉用户文件是否正在使用 我有一个文件 如果该文件正在使用 VBS 应该给我一条消息 表明该文件正在使用 如果文件没有被任何进程使用 VBS 应该给我消息说文件没有被使用 我试过this http suppo
  • Swift - 如何关闭所有视图控制器以返回根目录

    我希望我的应用程序可以在每次用户需要时转到第一个视图控制器 所以我想创建一个函数来关闭所有视图控制器 无论它是被推入导航控制器还是以模态方式呈现或打开任何方法 我尝试了各种方法 但我未能肯定地关闭所有视图控制器 有简单的方法吗 尝试这个 s
  • 使用 Swift 3 的 FB 登录不返回任何值,并且在成功登录后不让用户返回应用程序

    我在用着iOS 10 Swift 3集成FB Login 我已遵循以下所有步骤Facebook文档 现在的问题是 成功登录后 它不会返回任何值 也不会让用户返回应用程序 注意 同样适用于Swift 2 您好 我向 facebook 开发人员
  • 针对 API 目标的计划 EventBridge 规则

    是否可以创建一个 EventBridge 规则 该规则可以安排在一天中的特定时间运行并调用 API 作为自定义目标 如果目标是 AWS 或合作伙伴服务 则似乎可以为目标设置计划 但如果它们是自定义配置的端点 则不能为目标设置计划 我想做的就
  • 服务引用错误:无法生成服务引用的代码

    我有一个 Windows 服务解决方案 并尝试在 VS2010 中添加对 Hermes 开源 ebms 消息服务器 Web 服务的服务引用 我可以使用 Web 服务的 URL 找到它 但是当我尝试填充服务引用时 我在 Visual Stud
  • SQL Server 中 BIT 字段比 int 字段快吗?

    我有一些字段的表 其值将为 1 0 随着时间的推移 该表将变得非常大 使用位数据类型好还是使用不同类型来提高性能更好 当然 所有字段都应该建立索引 我无法为您提供任何有关性能的统计数据 但是 您应该始终使用最能代表您的数据的类型 如果您想要
  • Angular 2 - 路由 - CanActivate 与 Observable 配合使用

    我有一个验证卫士 用于路由 实现可以激活 canActivate return this loginService isLoggedIn 我的问题是 CanActivate result 取决于 http get result 登录服务返回
  • 使用 R 的 Plumber - 创建 GET 端点来托管 CSV 格式的数据而不是 JSON

    我认为这是 R 管道工库的一个很好的快速演示 但主要是我正在努力以 csv 格式提供数据 我正在使用 R 的管道工包来托管我的一些体育数据的 API 端点 目前 我有一些数据可以获取我正在尝试提供的 MLB 棒球队的获胜总数 使用水管工 我