【发布时间】:2019-10-20 09:18:53
【问题描述】:
- 我有两台仪器 A、B,它们彼此“关闭”,存在一些系统误差。例如。 A 始终从 B 读取 +5。
- 所以,我需要一个函数
A_to_B,它将 A 的读数映射到 B,例如A = B + 5 - 我在脚本中编写了这个函数,使用 A 对 B 的线性模型。
- 但是,我在其他任何地方都使用这些工具,所以我在其他脚本中需要它。
- 所以,我尝试
save函数。
AB.readings <- read.csv('AB.csv')
AvB.lm <- lm(A~B+I(B^2), data=AB.readings)
A_to_B <- function(a) {
coeff <- AvB.lm$coefficients - c(a, 0, 0)
roots <- Re(polyroot(coeff))
return(roots[roots>=0]) # A, B readings > 0
}
save(AvB.lm, A_to_B, file='calibration.RData')
但是,当我尝试在其他脚本中加载和使用此功能时:
source('calibration.RData')
AB.readings <- read.csv('AB2.csv')
AB.readings$A <- A_to_B(AB.readings$A)
我得到错误:
Error in A_to_B(AB.readings$A) : object 'AvB.lm' not found
Execution halted
所以很明显我在范围界定方面做错了。
在 R 中执行此操作的正确方法是什么?
【问题讨论】:
-
假设我不想每次都重新运行
lm(另外,我每次都必须加载“训练”CSV 数据,当我在不同的工作目录中时这似乎很棘手)。没有别的办法吗? -
@RAB 为什么 Rdata 用于数据,而不是函数? Rdata文件可以保存任何R对象,包括函数。
-
R中的@RAB,函数是一等对象