python - 如何在 R 中定义积分参数? (缺少参数 "a",没有默认值)

标签 python r

我正在尝试在 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]

但是在 R 中我收到错误:

argument "a" is missing, with no default

最佳答案

我认为这是因为a = a1[i]匹配以a开头的integral的参数,即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

关于python - 如何在 R 中定义积分参数? (缺少参数 "a",没有默认值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56409369/

相关文章:

python - 如何有效地从多个 DataFrame 中获取单元格值以插入主 DataFrame

python - Django 应该什么时候调用 save 方法?

python - 如何访问yaml文件中另一个变量内的变量?

r - 将连续数据展开为 R 中的单行

r - R 包中 README 和小插图之间的目的区别是什么?

sql-server - sql保存: Mapping dataframe timestamps to SQL Server timestamps

python - 训练神经网络时,Tensorflow 完成后是否会自动恢复到最佳时期?

r - 将 Knitr 生成的 Tex 文件转换为 .doc

r - R 中无向图中的循环

python - Django 上的日期时间字段存储插入行的日期?