在包中使用roxfun

Hon*_*Ooi 0 r package

帮助approxapproxfun包括以下警告:

警告

由roxfun返回的值包含对当前R版本中代码的引用:不应将其保存并加载到其他R会话中。对于R> = 3.0.0,这更安全。

我不确定这意味着什么,尤其是关于“对于R> = 3.0.0更安全”的最后一部分。我已经编写了一些代码,其中包含使用创建的函数approxfun。现在将该代码放入包中是否安全?我已经对其进行了测试,并且似乎可以运行,但是我不知道我是否可以依靠它。

这是Windows 7 64位上的R 3.1.1。

确切的代码是这样的。我有一些关于函数值的数据,并且我想近似底层函数(我没有源代码)。

.table <- read.table(text="x y
10.0    150
37.8    147
65.6    145
93.3    142", header=TRUE) # plus several more lines in the original 

# this function is to be exported in the package
f <- with(.table, approxfun(x, y))
Run Code Online (Sandbox Code Playgroud)




编辑:感谢@MrFlick指出结果函数调用.approxfun是stats包中的未导出函数。因此,R的未来版本可能会忽略此功能,尽管至少在短期内这不太可能。但是还有另一个问题。我仔细查看了的来源approxfun,并以以下几行结尾:

    ....
    x <- as.double(x)
    y <- as.double(y)
    .Call(C_ApproxTest, x, y, method, f)
    function(v) .approxfun(x, y, v, method, yleft, yright, f)
}
Run Code Online (Sandbox Code Playgroud)

.approxfun仅仅是:

function (x, y, v, method, yleft, yright, f) 
.Call(C_Approx, x, y, v, method, yleft, yright, f)
Run Code Online (Sandbox Code Playgroud)

看起来像approxfun调用已编译的C代码来初始化一些数据,.approxfun然后使用该数据。如果我调用approxfun打包的代码,是否仍可以依靠最初的C调用发生?

MrF*_*ick 5

该警告更多地是关于您是否要使用save()以及fun load()返回的函数approx。使用样本数据,如果您查看

f
# function (v) 
# .approxfun(x, y, v, method, yleft, yright, f)
# <bytecode: 0x10a20d948>
# <environment: 0x10a20d0d8>
Run Code Online (Sandbox Code Playgroud)

您会看到它只是在调用带有的较低级(未导出)函数.approxfun。此函数不一定要被称为目录,并且可能会在将来的R版本中更改。该函数传递的值存储在该函数的环境中。观察:

ls.str(envir=environment(f))
# f :  num 0
# method :  int 1
# x :  num [1:4] 10 37.8 65.6 93.3
# y :  num [1:4] 150 147 145 142
# yleft :  logi NA
# yright :  logi NA
Run Code Online (Sandbox Code Playgroud)

我不确定R的较旧版本是否在存储附件内容时出现问题。

但是,只要您正在调用approx()并返回一个值,就可以了。该警告似乎只是关于将结果函数保存在R图像数据文件中。