和你一樣,雖然多項式函數返回一個R表達式,但我們都是錯誤的。閱讀幫助索引包:多項式會幫助我們倆:
str(pol)
#Class 'polynomial' num [1:2] 1 2
help(pac=polynom)
所以user20650是正確的:
> poly_function <- as.function(pol)
> poly_function(10)
[1] 21
因此,這是作者(維納布爾斯,Hornick,Maechler)如何做到這一點:
> getAnywhere(as.function.polynomial)
A single object matching ‘as.function.polynomial’ was found
It was found in the following places
registered S3 method for as.function from namespace polynom
namespace:polynom
with value
function (x, ...)
{
a <- rev(coef(x))
w <- as.name("w")
v <- as.name("x")
ex <- call("{", call("<-", w, 0))
for (i in seq_along(a)) {
ex[[i + 2]] <- call("<-", w, call("+", a[1], call("*",
v, w)))
a <- a[-1]
}
ex[[length(ex) + 1]] <- w
f <- function(x) NULL
body(f) <- ex
f
}
<environment: namespace:polynom>
既然你在評論提到getAnywhere是新的,然後它也可能是,你可以通過查看「跑起來」,以使用它獲得的情況。如果您在控制檯提示符下鍵入一個函數名,你得到的代碼,在這種情況下:
> as.function
function (x, ...)
UseMethod("as.function")
<bytecode: 0x7f978bff5fc8>
<environment: namespace:base>
,直到你跟着它了這是相當無益:
> methods(as.function)
[1] as.function.default as.function.polynomial*
see '?methods' for accessing help and source code
星號末的polynomial
版本告訴你,代碼不是「導出」,即只通過輸入在控制檯上可用。所以你需要從getAnywhere
的加載名稱空間中撬出它。
似乎還有爲'˚F<功能 - as.function(多項式(C(1,2)))' – user20650
@ user20650謝謝! – pidosaurus