如何在R中获得可读的样条公式?

时间:2015-05-07 01:40:08

标签: r

在下面的代码中,我在f中存储并使用从splinefun函数获得的函数。我可以使用它,但是我想以可读格式打印函数以理解计算。

x <- 1:7
y <- c(2,4,3,2,1,1,2)
f <- splinefun(x, y, method = "natural")
f(1)
f(2)
f(3.5)

如果我打印功能

print(f)

无论输入属性

,我总是得到以下内容
function (x, deriv = 0L)  
{
    deriv <- as.integer(deriv)
    if (deriv < 0L || deriv > 3L) 
        stop("'deriv' must be between 0 and 3")
    if (deriv > 0L) {
        z0 <- double(z$n)
        z[c("y", "b", "c")] <- switch(deriv, list(y = z$b, b = 2 * 
            z$c, c = 3 * z$d), list(y = 2 * z$c, b = 6 * z$d, 
            c = z0), list(y = 6 * z$d, b = z0, c = z0))
        z[["d"]] <- z0
    }
    res <- .splinefun(x, z)
    if (deriv > 0 && z$method == 2 && any(ind <- x <= z$x[1L])) 
        res[ind] <- ifelse(deriv == 1, z$y[1L], 0)
    res
}
<bytecode: 0x00000000089957a0>
<environment: 0x0000000007b8a700>

如何以f(x)= a + bx + cx ^ 2 ......等格式获取公式?

1 个答案:

答案 0 :(得分:1)

评估点和多项式近似的系数存储在函数的环境中。这些将传递给C_SplineEval, x, z)

 ls(envir=environment(f))
#[1] "z"
 environment(f)$z
#-----------------------
$method
[1] 2

$n
[1] 7

$x
[1] 1 2 3 4 5 6 7

$y
[1] 2 4 3 2 1 1 2

$b
[1]  2.8076923  0.3846154 -1.3461538 -1.0000000 -0.6538462  0.6153846  1.1923077

$c
[1]  0.0000000 -2.4230769  0.6923077 -0.3461538  0.6923077  0.5769231  0.0000000

$d
[1] -0.80769231  1.03846154 -0.34615385  0.34615385 -0.03846154 -0.19230769
[7]  0.00000000

对帮助页面中的注释的评论/问题的回复:查看NEWS文件,可以看到此条目:

approxfun()splinefun()现在返回stats名称空间中的内部函数的包装器,而不是.C().Call()调用。如果在不同的会话中保存并使用该功能,则更有可能工作。“