R语言中的plumber介绍

news2024/10/7 14:13:39

R语言中的plumber介绍

  • 基本用法
  • 常用 API 方法
    • 1. GET 方法
    • 2. POST 方法
    • 3. 带路径参数的 GET 方法
  • 使用 R 对数据进行操作
  • 处理 JSON 输入和输出
  • 运行 API 的其他选项
  • 其他功能

plumber 是个强大的 R 包,用于将 R 代码转换为 Web API,通过使用 plumber,可轻松地创建 RESTfulI,以便将 R 的数据处理和分析功能暴露给其他应用程序或用户,plumber是一个非常方便的工具,无论是简单的函数调用还是复杂的数据处理,plumber 都能轻松应对

基本用法

示例

library(plumber)

#* @apiTitle 简单 API 示例

#* @get /echo
#* @param msg Query parameter
#* @response 200 返回传递的消息
function(msg = "") {
  list(message = paste("你发送的消息是:", msg))
}

其中#* @标记请求参数格式
可将上面的代码保存在一个名为 api.R 的文件中,然后使用以下代码启动 API:

# 启动 API
library(plumber)
r <- plumb("api.R")  # 载入 API 定义
r$run(port = 8000)    # 启动 API 服务器

然后可通过访问 http://localhost:8000/echo?msg=Hello 来测试 API
在这里插入图片描述
在这里插入图片描述

常用 API 方法

1. GET 方法

#* @get /hello
function() {
  list(message = "Hello, world!")
}

在这里插入图片描述
在这里插入图片描述

2. POST 方法

#* @post /add
#* @param a:num 第一个数字
#* @param b:num 第二个数字
#* @response 200 返回两个数字的和
function(a, b) {
  result <- as.numeric(a) + as.numeric(b)
  list(sum = result)
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

可以使用 POST 请求将数据发送到 /add,比如通过 curl 或 Postman

3. 带路径参数的 GET 方法

#* @get /square/<num>
#* @param num:num 需要平方的数字
#* @response 200 返回平方值
function(num) {
  result <- as.numeric(num)^2
  list(square = result)
}

在这里插入图片描述

访问 http://localhost:8000/square/4 将返回 { “square”: 16 }
在这里插入图片描述

使用 R 对数据进行操作

你可以在 API 中使用 R 的数据操作功能。示例如何计算数据框的统计信息:

#* @get /summary
#* @param dataset:string 数据集名称
#* @response 200 返回数据集的描述性统计
function(dataset) {
  data(mtcars)  # 加载示例数据集
  if (dataset == "mtcars") {
    summary(mtcars)
  } else {
    list(error = "数据集不存在")
  }
}

处理 JSON 输入和输出

例如处理 JSON 输入的示例:

#* @post /mean
#* @param numbers:json 一个数字数组
#* @response 200 返回平均值
function(numbers) {
  mean_value <- mean(unlist(numbers))
  list(mean = mean_value)
}
可向 /mean 发送一个 JSON 数组,例如:
{
  "numbers": [1, 2, 3, 4, 5]
}

运行 API 的其他选项

除了直接在脚本中启动 API,还可以使用 RStudio 或命令行工具将其作为服务运行

library(plumber)
# 创建 API 定义
#* @apiTitle 示例 API
#* @apiVersion 1.0.0

#* @get /hello
function() {
  list(message = "Hello, world!")
}

#* @post /multiply
#* @param a:num 第一个数字
#* @param b:num 第二个数字
#* @response 200 返回乘积
function(a, b) {
  list(product = as.numeric(a) * as.numeric(b))
}
# 启动 API
# r <- plumb("path/to/your/api.R")
# r$run(port = 8000)

在这里插入图片描述

其他功能

  • 身份验证:可以通过添加认证逻辑来保护 API
  • 文档生成:使用注释可以生成 API 文档,便于用户了解如何使用
  • 错误处理:可以自定义错误响应
# 安装和加载 plumber 包
# install.packages("plumber")
library(plumber)

# 创建自定义错误处理函数
custom_error_handler <- function(req, res, err) {
  # 创建一个新的响应对象
  res$status <- 400  # 自定义状态码
  res$body <- list(
    error = "400 - Bad Request",
    message = err$message
  )
  return(res)
}

# 定义一个算术加法的 API 路由
# @param a number 被加数
# @param b number 加数
# @post /add
# @error custom_error_handler  # 使用自定义错误处理函数
function(a, b) {
  # 尝试将参数转换为数值类型
  a_numeric <- as.numeric(a)
  b_numeric <- as.numeric(b)
  
  # 检查是否成功转换
  if (is.na(a_numeric) || is.na(b_numeric)) {
    stop("参数 a 和 b 必须为有效的数值")
  }
  
  # 执行加法
  result <- a_numeric + b_numeric
  list(result = result)
}

整理不易 如果觉得有帮助,可以打赏下^ _ ^
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2194307.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

启动hadoop后没有 NodeManager和 ResourceManager

跟着黑马网课学下去时发现我的hadoop启动后没有NodeManager和ResourceManager 找到日志的路径 我在/export/server/hadoop/etc/hadoop/hadoop-env.sh文件里配置了日志存放的路径 这里找到你的日志路径&#xff0c;每个人的习惯和看的教程不同&#xff0c;日志放的地方大概率也…

MATLAB中lsqminnorm函数用法

目录 语法 说明 示例 求解具有无限个解的线性系统 指定容差以减少含噪数据的影响 切换显示低秩矩阵警告 lsqminnorm函数的功能是线性方程的最小范数最小二乘解。 语法 X lsqminnorm(A,B) X lsqminnorm(A,B,tol) X lsqminnorm(___,rankWarn) 说明 X lsqminnorm(A,B…

【大语言模型-论文精读】用于医疗领域摘要任务的大型语言模型评估综述

【大语言模型-论文精读】用于医疗领域摘要任务的大型语言模型评估综述 论文信息&#xff1a; 用于医疗领域摘要任务的大型语言模型评估&#xff1a;一篇叙述性综述&#xff0c; 文章是由 Emma Croxford , Yanjun Gao 博士 , Nicholas Pellegrino , Karen K. Wong 等人近期合作…

【Arduino IDE安装】Arduino IDE的简介和安装详情

目录 &#x1f31e;1. Arduino IDE概述 &#x1f31e;2. Arduino IDE安装详情 &#x1f30d;2.1 获取安装包 &#x1f30d;2.2 安装详情 &#x1f30d;2.3 配置中文 &#x1f30d;2.4 其他配置 &#x1f31e;1. Arduino IDE概述 Arduino IDE&#xff08;Integrated Deve…

Spring Boot医院管理系统:提升患者体验

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

python pass的作用

class Phone: IMEI None # 序列号 producer “ITCAST” # 厂商 def call_by_4g(self):print("4g通话")class Phone2022(Phone): face_id “10001” # 面部识别ID def call_by_5g(self):print("2022年新功能&#xff1a;5g通话")class NFCReader: nfc_ty…

​​​​​​​如何使用Hugging Face上的FacePoke工具调整照片中人的头部位置

在照片处理中&#xff0c;调整人物的头部位置可以为你带来创意无限的效果。借助Hugging Face上的FacePoke工具&#xff0c;这一操作变得前所未有的简单和高效。以下是详细步骤&#xff0c;教你如何使用FacePoke来调整照片中人的头部位置。 第一步&#xff1a;访问FacePoke工具…

二、Python(项目创建、常见的设置、print函数)

一、项目创建 二、常见设置 1.字体大小 2.插件 3.主题设置 4.配置解释器 三、print函数 在 Python 中&#xff0c;print()函数是一个非常重要的用于输出内容的函数。 作用&#xff1a;print函数在控制台中输出(显示,打印)括号中的内容&#xff0c;可以用于验证代码的输出结果…

【Kubernetes】常见面试题汇总(五十八)

目录 127.创建 PV 失败&#xff1f; 128. pod 无法挂载 PVC&#xff1f; 特别说明&#xff1a; 题目 1-68 属于【Kubernetes】的常规概念题&#xff0c;即 “ 汇总&#xff08;一&#xff09;~&#xff08;二十二&#xff09;” 。 题目 69-113 属于【Kubernetes】…

SpringBoot开发——SpringSecurity安全框架17个业务场景案例(一)

文章目录 一、Spring Security 常用应用场景介绍二、Spring Security场景案例1、认证(Authentication)1.1. Spring Security 配置1.2 业务逻辑代码1.3 登录控制器1.4 登录页面 (login.html)2、授权(Authorization)2.1 Spring Security 配置2.2 业务逻辑代码2.3 控制器3、表…

如何判断静态代理IP地址是否被污染?

在网络使用中&#xff0c;静态IP代理是一种常见的工具&#xff0c;用于维持稳定的连接和保护个人隐私。然而&#xff0c;有时这些IP地址可能会被污染&#xff0c;导致用户遭受各种问题&#xff0c;如连接延迟、数据泄露等。因此&#xff0c;了解如何判断址是否被污染至关重要。…

EPC User Manual Introduction

Overview 您提供的链接是指向srsRAN 4G项目的官方文档&#xff0c;具体是关于srsEPC的介绍部分。以下是该页面的核心内容概要&#xff1a; ### 概述 srsEPC是一个轻量级的完整LTE核心网络&#xff08;EPC&#xff09;实现。srsEPC应用程序作为一个单一的二进制文件运行&#…

【高阶数据结构】二叉树进阶探秘:AVL树的平衡机制与实现详解

高阶数据结构相关知识点可以通过点击以下链接进行学习一起加油&#xff01;二叉搜索树 大家好&#xff0c;这里是店小二&#xff01;今天我们将深入探讨高阶数据结构中的AVL树。AVL树是一种自平衡的二叉搜索树&#xff0c;可以看作是对传统二叉搜索树的优化版本。如果你对数据结…

828华为云征文|华为云Flexus云服务器X实例部署 即时通讯IM聊天交友软件——高性能服务器实现120W并发连接

营运版的即时通讯IM聊天交友系统&#xff1a;特点可发红包&#xff0c;可添加多条链接到用户网站和应用&#xff0c;安卓苹果APPPC端H5四合一 后端开发语言&#xff1a;PHP&#xff0c; 前端开发语言&#xff1a;uniapp混合开发。 集安卓苹果APPPC端H5四合一APP源码&#xff0…

AI学习记录 - L2正则化详细解释(权重衰减)

大白话&#xff1a; 通过让反向传播的损失值变得比原来更大&#xff0c;并且加入的损失值和权重的大小有关&#xff0c;当出现权重的平方变大的时候&#xff0c;也就是权重往更加负或者更加正的方向走的时候&#xff0c;损失就越大&#xff0c;从而控制极大正或者极大负的情况…

在宝塔面板中部署 Express + MongoDB + Uniapp h5 项目(超详细!!!)

文章目录 一、打包 uniapp h5 项目(1) 打开 manifest.json 文件&#xff0c;修改相关配置(2) 开始项目打包 二、修改 express 相关配置(1) 添加打包后的前端资源文件(2) 修改 app.js 文件(3) 修改项目启动命令 三、使用宝塔面板部署项目(1) 宝塔面板安装(2) 项目环境搭建 四、添…

之前各种炸裂的Flux更新了Flux1.1 pro,效果会不会依然“炸裂”呢?

&#x1f420;更新内容 Black Forest Labs&#xff0c;也就是黑森林工作室在国庆期间更新了新的模型&#xff0c;Flux1.1 Pro&#xff0c;官方公告大家也可以参考&#xff1a; announcements. - Black Forest Labs 那么这次更新主要讲了什么呢&#xff1f; FLUX1.1 [pro]&am…

系统架构设计师-下午案例题(2018年下半年)

1.某文化产业集团委托软件公司开发一套文化用品商城系统,业务涉及文化用品销售、定制、竞拍和点评等板块,以提升商城的信息化建设水平。该软件公司组织项目组完成了需求调研,现已进入到系统架构设计阶段。考虑到系统需求对架构设计决策的影响,项目组先列出了可能影响系统架…

企业人力资源管理,人事档案管理,绩效考核,五险一金,招聘培训,薪酬管理一体化管理系统(源码)

EHR人力资源管理系统是现代企业提升人力资源管理效率的重要工具。该系统集成了多个功能模块&#xff0c;旨在实现人力资源管理的全面数字化和自动化。以下是对EHR系统主要功能的剖析&#xff0c;包括组织架构、人事管理、考勤管理、薪资管理、绩效管理、档案管理、招聘管理、培…

如何写出更系统的验证检查器

前言 芯片验证是为了发现芯片中的错误而执行的过程&#xff0c;它是一个破坏性的过程。有效激励灌入待测模块后&#xff0c;需要判断出不符合功能描述的行为。检查器(Checker)就是用于查看待测模块是否按照功能描述文档做出期望的行为&#xff0c;识别出所有的设计缺陷。 不同…