使用R.matlab的setFunction设置MATLAB函数报错,如何解决?
解决R.matlab中setFunction报错的问题
问题根源
你的代码存在两个核心问题:
- MATLAB函数内部的缩进错误:
aver = win/B;这一行的缩进层级错误,导致MATLAB无法正确识别它是函数体的一部分。 - 字符串传递时的格式问题:原代码使用了HTML转义的
",在R中直接使用会引发解析异常;同时新版本MATLAB要求函数必须用end语句闭合,原代码的函数结构不符合规范。
修正后的代码
library(R.matlab) Matlab$startServer() matlab <- Matlab() isOpen <- open(matlab) # 用单引号包裹MATLAB函数字符串,避免双引号转义干扰 setFunction(matlab, ' function [win, aver] = dice(B) %Play the dice game B times gains = [-1, 2, -3, 4, -5, 6]; plays = unidrnd(6, B, 1); win = sum(gains(plays)); aver = win/B; end ')
关键修正点
- 统一缩进层级:确保函数体内所有语句(包括
aver = win/B;)处于同一缩进级别,和gains、plays等语句对齐,保证MATLAB能正确解析函数逻辑。 - 添加end闭合语句:新版本MATLAB强制要求函数用
end收尾,即使是短函数也必须遵守该语法规则。 - 优化字符串引号:在R中用单引号包裹MATLAB代码字符串,避免双引号转义问题,同时消除HTML转义字符的影响。
验证方法
设置函数后,可通过调用测试功能是否正常:
# 调用dice函数,传入参数B=1000 result <- call(matlab, "dice", 1000) print(result)
内容的提问来源于stack exchange,提问作者Chinyako
相关产品推荐
相关产品推荐

