python - 如何在 R 中定义整数参数?(参数“a”缺失,没有默认值)
问题描述
我正在尝试在 R 中重新创建 python 代码,但无论我尝试什么,我都会收到错误消息。
这是我的python代码,它有效
def Cp(T,a,b,c):
return a+b*T+c*(T**2)
a = np.array([26.63, 20.04, 13.39])
b = np.array([0.183, 0.0945, 0.077])
c = -np.array([45.86, 30.95, 18.71])*(10**(-6))
Tp = 298
Tk = 1035
RE = np.array([0, 1, 2])
Cps1 = [(1/(Tk-Tp))*si.romberg(Cp, Tp, Tk, args=(a[i], b[i], c[i])) for i in RE]
Cps1
这就是我尝试在 R 中执行此操作的方式
Cp <- function(Te,a,b,c) a+b*Te+c*(Te**2)
a1 <- c(26.63, 20.04, 13.39)
b1 <- c(0.183, 0.0945, 0.077)
c1 <- -c(45.86, 30.95, 18.71)*(10**(-6))
Tp <- 298
Tk <- 1035
require(pracma)
for(i in seq(1,3,1)){
Cps1[i] <- (1/(Tk-Tp))*integral(Cp, Tp, Tk, a=a1[i], b=b1[i], c=c1[i])
}
Cps1
在python中我得到了这个
[126.15165675333331, 67.87464798333333, 55.55221070333332]
但在 RI 中出现错误:
缺少参数“a”,没有默认值
解决方案
我认为这是因为a = a1[i]
匹配以integral
开头的参数a
,即abstol
。
所以一个解决方案是指定abstol
:
integral(Cp, Tp, Tk, abstol=0, a=a1[1], b=b1[1], c=c1[1])
# 92973.77
这与 Python 结果匹配:
> 92973.77/(Tk-Tp)
[1] 126.1517
解释
函数中存在编码错误pracma::integral
。此函数的使用match.fun
方式类似于以下函数I1
:
I1 <- function(f, abstol=0, ...){
f <- match.fun(f)
ff <- function(x) f(x, ...)
ff(1)
}
f <- function(x, a) x + a
I1(f, a = 2)
# Error in f(x, ...) : argument "a" is missing, with no default
编码这种情况的正确方法是将参数放在...
其他参数之前:
I2 <- function(f, ..., abstol=0){
f <- match.fun(f)
ff <- function(x) f(x, ...)
ff(1)
}
f <- function(x, a) x + a
I2(f, a = 2)
# 3
推荐阅读
- arrays - 为什么连接和复制大于数组大小的字符串没有错误?
- jenkins - 此 SHA 和上下文已达到 Jenkins 中的最大状态数
- html - 如何删除 Safari 上的复选框阴影
- android - cloud_firestore android:foregroundServiceType 未找到
- javascript - React 不接受 CSS 类
- go - 在 Go 应用程序中使用 Cassandra 插入之前检查行是否存在
- c# - c# Soundplayer 不能在其中播放完整的 .wav 文件剪切
- java - snapshot.getValue(User.class) 返回 null
- excel - Excel - 如果条件为真,则从其他工作表复制
- javascript - Dynamics 365 FetchXml 返回不同的结果