Fork me on GitHub

OpenCPU(MAC版)

OpenCPU:让 R 变成 Web API(macOS 本地部署教程)

R 擅长数据分析,但不适合写 Web 服务?那是你还没用上 OpenCPU

OpenCPU 是一个让 R 函数变成 HTTP 接口的框架,支持 JSON 输入输出、绘图、报表、生成功能强大。


🍎 环境准备(macOS)

确认你已经安装以下内容:

  • R(推荐最新版)
  • Xcode command line tools(终端执行:xcode-select --install
  • Homebrew(可选但推荐)

🛠 安装 OpenCPU

查看官网Local Single-User Server部分

# 1. 安装 R 和系统依赖
brew install r
brew install libgit2
brew install protobuf

# 2.安装 OpenCPU Server 包
R #进入R语言控制台
install.packages("opencpu")

🧪 创建 R 包项目

image

1. 创建项目结构

mkdir helloworld
cd helloworld
mkdir R
touch DESCRIPTION
touch R/hello.R

2. 填写 DESCRIPTION 文件

Package: helloworld
Type: Package
Title: Hello World API
Version: 0.1
Author: 你自己
Maintainer: 你 <you@example.com>
Description: A simple Hello World API using OpenCPU.
License: MIT
Encoding: UTF-8

3. 编写函数代码(R/hello.R

#' Say Hello
#'
#' @param name 名字
#' @return 一个 Hello 字符串
#' @export
#' @name hello
hello <- function(name = "World") {
  paste("Hello,", name, "!")
}

🚀 安装并测试 API

安装 devtools 并安装本地包

install.packages("devtools")  # 第一次使用需安装
library(devtools)

setwd("/绝对路径/helloworld")

# 安装成本地 R 包
devtools::document()  # 生成文档
devtools::install()   # 安装这个包

image
测试本地安装的hello函数

# 验证包是否可以正常加载
library(helloworld)
#直接使用helloworld包里面的函数
hello()
#查看帮助文档
?hello

#使用 testthat 编写测试(可选)
devtools::test()

image

运行 OpenCPU 服务

# install完成后,运行 OpenCPU 服务(这里是包名,不是路径),开发时可以使用这种方式启动,线上部署时需要使用apache
opencpu::ocpu_start_app("helloworld")

image
访问http://localhost:5656/ocpu/library/helloworld/info
image


🌐 调用 Web API

确保你的 OpenCPU 服务正常运行(可以用 Docker 或系统服务),然后通过 curl 调用:

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"name": "秋先生"}' \
  http://127.0.0.1:5656/ocpu/library/helloworld/R/hello/json

image

返回结果:

"Hello, 秋先生 !"

❓ 调试技巧

  • 如何查看所有函数?
    浏览器访问:http://127.0.0.1:5656/ocpu/library/helloworld/R/

  • 出错怎么办?
    API 返回的响应中包含 .Rout 链接,点进去查看报错日志。

  • 只想测试本地,不装完整服务器?
    可以运行:

    opencpu::ocpu_start_app("./helloworld")
    

    然后访问 http://127.0.0.1:5656 即可。


🐾 结语

OpenCPU 是一个桥梁,让你能用 R 写出真正的 Web API 服务。这个 hello() 函数只是冰山一角:

可以进一步:

  • 加入绘图、数据分析函数
  • 返回 HTML、PDF 或图像
  • 封装数据报表为 API 服务
    R,不只是分析,更可以成为你系统的一部分。
posted @ 2025-05-13 16:50  秋夜雨巷  阅读(89)  评论(0)    收藏  举报