百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

R 语言 + aardio 快速开发图形界面、生成独立 EXE

liuian 2025-04-09 17:53 48 浏览

aardio 已大幅改进对 R 语言的支持,下面直接看代码。

复制粘贴下面的代码到 aardio 编辑器就可以运行。所有关于 R 语言的事情与准备工作 aardio 会全自动化处理。

一、aardio 调用 R 函数

//调用 R 函数
import process.r;

//定义 R 语言函数
var rCode = /*
add <- function(a,b) { 
   result <- a + b    
   print(result) 
}
*/

//启动 R 语言
var r = process.r.startRpc(rCode);
 
//调用 R 函数
var ret  = r.add(2,3);

//获取返回值
ret = ret[["result"]];

就这么简单两个编程语言就可以方便地交互了。

二、 R 语言 + aardio 窗口绘图

用 aardio 画界面绘图,R 语言生成图像。

先看流畅的动画效果:

实现上面效果的 aardio + R 代码也非常简单:

import win.ui;
/*DSG{{*/
var winform = win.form(text="R 在 aardio 窗口上绘图")
winform.add(
button={cls="button";text="点这里调用 R 绘图";left=472;top=414;right=680;bottom=456;z=2};
plus={cls="plus";left=18;top=15;right=739;bottom=397;bgcolor=16777215;z=1}
)
/*}}*/

//R 语言代码
var rCode = /*
draw_sine_wave <- function(filename, phase_shift = 0, amplitude = 1) {
  png(filename, width = 800, height = 600)
  x <- seq(0, 2 * pi, length.out = 1000) 
  y <- amplitude * sin(x + phase_shift)

  # 绘制图形
  plot(x, y, type = "l", col = "blue", lwd = 2,
       main = paste("Dynamic Sine Wave, Amplitude:", round(amplitude, 2)),
       xlab = "X Axis", ylab = "Y Axis",
       xlim = c(0, 2 * pi), ylim = c(-2, 2))
  
  # 关闭设备
  dev.off()
  
  new_phase_shift <- phase_shift + pi / 20
  new_amplitude <- 1 + sin(phase_shift)

  return(list(phase_shift = new_phase_shift, amplitude = new_amplitude))
}
*/

//启动 R 
import process.r;
var r = process.r.startRpc(rCode);

//按钮点击事件
winform.button.oncommand = function(id,event){
    
    //设置绘图初始变量
    var params = {
        phase_shift = 0;
        amplitude = 1
    } 
    
    //创建定时器
    winform.setInterval( 
        function(){ 
            
            //调用 R 函数
            params,err  = r.draw_sine_wave(io.fullpath("/test2.png"), params.phase_shift,params.amplitude)
          
            //取 R 函数返回值
            params = params.result;
              
            //显示图像,先读取到内存,不占用文件,让 R 函数可以自由写文件。 
            winform.plus.background = string.load("/test2.png"); 
            
        },80
    )
    
    //启动按钮动画
    winform.button.disabledText = {"";"";"";"";"";""} 
}

winform.show();
win.loopMessage();


三、 R 语言(Shiny)+ aardio + WebView2 网页交互界面

强大的 WebView2 其实也可以用于 R 语言。

用 R 语言方便地控制网页绘图与交互,也可以在绘图交互界面用 JavaScript 直接调用 aardio 函数。

先看效果:

R 绘图很强,这里只是演示基本的路子。

下面看实现代码:


import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio + R 语言 (Shiny)+ WebView2 界面")
/*}}*/

import process.r;
import wsock.tcp.server;

//安装 R 包,如果已安装忽略不操作
process.r.require("shiny");
 
//R 代码 
var rCode = `
library(shiny)
library(jsonlite)

ui <- fluidpage titlepaneljavascript in shiny sidebarlayout sidebarpanel sliderinputnumpoints : min='10,' max='100,' value='30),' actionbuttongenplot mainpanel plotoutputdistplot htmljavascript tagsscripthtml shiny.addcustommessagehandlersendjsondataasync functiondata aardio var ret='await' aardio.nativemsgboxdata window.myjsondata='data;' javascript document.onshiny:inputchanged functionevent if event.name='== 'genPlot'' event.value> 0) { 
            //Shiny.onInputChange('jsData', JSON.stringify(window.myJsonData)); 
          }
        }); 
      "))
    )
  )
)

server <- function(input, output, session) {
  data <- reactive({
    data.frame(x = rnorm(input$numPoints), y = rnorm(input$numPoints))
  })

  output$distPlot <- renderplot reqinputgenplot> 0)
    plot(data()$x, data()$y, main = "随机分布图")
  })

  observeEvent(input$genPlot, {
    jsonData <- toJSON(data(),dataframe="values")
    session$sendCustomMessage(type = 'sendJsonData', message = jsonData)
  })
}

# 获取空闲端口
args<-commandArgs(T)
port<-as.integer(args[1])

# 运行 Shiny 应用
shinyApp(ui = ui, server = server, options = list(port = port, host = '127.0.0.1'))
`; //可以添加不定个数的启动参数
 
//启动 R,分配空闲端口(安全、不会相互冲突)
var port = wsock.tcp.server.getFreePort('127.0.0.1');
var r = process.r.start(rCode,port);

import web.view;
var wb = web.view(winform);

//导出 aardio 函数,可在网页上调用以下函数
wb.external = {
    nativeMsgbox = function(obj){ 
        winform.msgbox( obj )
    } 
}

wb.go("http://127.0.0.1:"+port);

winform.show(3/*_SW_MAXIMIZE*/);
win.loopMessage();

四、aardio / R 传递、接收命令行参数

import console.int; 
import process.r;

var out = process.r.exec(`

#这样接收参数,R.utils 包也有一个 commandArgs 可以解析命名参数
args <- commandArgs(T);

cat( args[1] )

`,"测试一下"); 

//可以添加不定个数的启动参数或表参数
//aardio 中 string.args 支持的格式都可以用在这里

console.log( out );

五、aardio / R 通过 JSON 交换对象

import console.int;  
import process.r;

//安装 R 包,如果已安装忽略不操作
process.r.require("jsonlite")

//如果返回值为 JSON,则自动解析 JSON 并返回对象。
var obj = process.r.json( `
library("jsonlite") # 载入 jsonlite 包

args <- commandArgs(T);
tab <- fromJSON(args[1], simplifyVector=FALSE);

#不要用 print ,cat 不会加一堆不必要的东西
cat( toJSON(tab,auto_unbox=TRUE) )
`, {
  name1 = "测试一下,传对象给 R 语言";
  name2 = "这是一个 aardio 对象"
})

//输出 R 返回的对象
console.dumpJson(obj); 

这里有一个细节要注意一下。

JSON 里的普通字符串,给 R 解析一下 JSON 再生成 JSON 就会变成 [ "字符串" ] 这样的数组。

这是因为 R 里面单个值是原子向量,相当于别的语言里长度为 1 的数组。

而 jsonlite 提供了一个 unbox 函数可以处理这个事,一个个的写 unbox(x) 并不容易,但其实 JSON 是一个很动态的东西。经常同一个对象他可能是数值,也可能是字符串,也可能是数组,但 unbox 如果用到非原子值上就会报错,所以最简单的方法是这样写:

toJSON(tab,auto_unbox=TRUE) )

很多事情,只要不追求完美,解决也就容易了。

六、嵌入 aardio 模板

aardio 本身提供语言级别的模板语法。

其实这东西很有趣,有点像用 PHP 写 HTML。例如 R 代码中间就可以用 插 aardio 代码进去,动态的控制输出与执行什么样的 R 代码。

模板语法并不复杂,具体可以看文档。

下面看一个简单的例子:

//嵌入模板
import console.int; 
import process.r;

//执行 R 代码,支持模板语法:  
var prcs = process.r.loadcode(`write("",file=".data.txt");`,{
    模板参数名 = "参数值"
})
 
prcs.logResponse();
 



相关推荐

驱动网卡(怎么从新驱动网卡)
驱动网卡(怎么从新驱动网卡)

网卡一般是指为电脑主机提供有线无线网络功能的适配器。而网卡驱动指的就是电脑连接识别这些网卡型号的桥梁。网卡只有打上了网卡驱动才能正常使用。并不是说所有的网卡一插到电脑上面就能进行数据传输了,他都需要里面芯片组的驱动文件才能支持他进行数据传输...

2026-01-30 00:37 liuian

win10更新助手装系统(微软win10更新助手)

1、点击首页“系统升级”的按钮,给出弹框,告诉用户需要上传IMEI码才能使用升级服务。同时给出同意和取消按钮。华为手机助手2、点击同意,则进入到“系统升级”功能华为手机助手华为手机助手3、在检测界面,...

windows11专业版密钥最新(windows11专业版激活码永久)

 Windows11专业版的正版密钥,我们是对windows的激活所必备的工具。该密钥我们可以通过微软商城或者通过计算机的硬件供应商去购买获得。获得了windows11专业版的正版密钥后,我...

手机删过的软件恢复(手机删除过的软件怎么恢复)
手机删过的软件恢复(手机删除过的软件怎么恢复)

操作步骤:1、首先,我们需要先打开手机。然后在许多图标中找到带有[文件管理]文本的图标,然后单击“文件管理”进入页面。2、进入页面后,我们将在顶部看到一行文本:手机,最新信息,文档,视频,图片,音乐,收藏,最后是我们正在寻找的[更多],单击...

2026-01-29 23:55 liuian

一键ghost手动备份系统步骤(一键ghost 备份)

  步骤1、首先把装有一键GHOST装系统的U盘插在电脑上,然后打开电脑马上按F2或DEL键入BIOS界面,然后就选择BOOT打USDHDD模式选择好,然后按F10键保存,电脑就会马上重启。  步骤...

怎么创建局域网(怎么创建局域网打游戏)

  1、购买路由器一台。进入路由器把dhcp功能打开  2、购买一台交换机。从路由器lan端口拉出一条网线查到交换机的任意一个端口上。  3、两台以上电脑。从交换机任意端口拉出网线插到电脑上(电脑设置...

精灵驱动器官方下载(精灵驱动手机版下载)

是的。驱动精灵是一款集驱动管理和硬件检测于一体的、专业级的驱动管理和维护工具。驱动精灵为用户提供驱动备份、恢复、安装、删除、在线更新等实用功能。1、全新驱动精灵2012引擎,大幅提升硬件和驱动辨识能力...

一键还原系统步骤(一键还原系统有哪些)

1、首先需要下载安装一下Windows一键还原程序,在安装程序窗口中,点击“下一步”,弹出“用户许可协议”窗口,选择“我同意该许可协议的条款”,并点击“下一步”。  2、在弹出的“准备安装”窗口中,可...

电脑加速器哪个好(电脑加速器哪款好)

我认为pp加速器最好用,飞速土豆太懒,急速酷六根本不工作。pp加速器什么网页都加速,太任劳任怨了!以上是个人观点,具体性能请自己试。ps:我家电脑性能很好。迅游加速盒子是可以加速电脑的。因为有过之...

任何u盘都可以做启动盘吗(u盘必须做成启动盘才能装系统吗)

是的,需要注意,U盘的大小要在4G以上,最好是8G以上,因为启动盘里面需要装系统,内存小的话,不能用来安装系统。内存卡或者U盘或者移动硬盘都可以用来做启动盘安装系统。普通的U盘就可以,不过最好U盘...

u盘怎么恢复文件(u盘文件恢复的方法)

开360安全卫士,点击上面的“功能大全”。点击文件恢复然后点击“数据”下的“文件恢复”功能。选择驱动接着选择需要恢复的驱动,选择接入的U盘。点击开始扫描选好就点击中间的“开始扫描”,开始扫描U盘数据。...

系统虚拟内存太低怎么办(系统虚拟内存占用过高什么原因)

1.检查系统虚拟内存使用情况,如果发现有大量的空闲内存,可以尝试释放一些不必要的进程,以释放内存空间。2.如果系统虚拟内存使用率较高,可以尝试增加系统虚拟内存的大小,以便更多的应用程序可以使用更多...

剪贴板权限设置方法(剪贴板访问权限)
剪贴板权限设置方法(剪贴板访问权限)

1、首先打开iphone手机,触碰并按住单词或图像直到显示选择选项。2、其次,然后选取“拷贝”或“剪贴板”。3、勾选需要的“权限”,最后选择开启,即可完成苹果剪贴板权限设置。仅参考1.打开苹果手机设置按钮,点击【通用】。2.点击【键盘】,再...

2026-01-29 21:37 liuian

平板系统重装大师(平板重装win系统)

如果你的平板开不了机,但可以连接上电脑,那就能好办,楼主下载安装个平板刷机王到你的个人电脑上,然后连接你的平板,平板刷机王会自动识别你的平板,平板刷机王上有你平板的我刷机包,楼主点击下载一个,下载完成...

联想官网售后服务网点(联想官网售后服务热线)

联想3c服务中心是联想旗下的官方售后,是基于互联网O2O模式开发的全新服务平台。可以为终端用户提供多品牌手机、电脑以及其他3C类产品的维修、保养和保险服务。根据客户需求层次,联想服务针对个人及家庭客户...