我试图创建一个具有一些特殊参数的函数。
此函数应具有参数(f1,f2和范围)。范围是函数f1和f2的间隔。该函数可以是f1 = cosx,f2 = 2x。然后该函数应在一个图上绘制该范围内的两个函数。
这是我现在脑海中的例子和功能概要:
f1=cosx
f2=2x
range=
MasterFun<- function(f1,f2,range) {
range <- interval for the function to be calculte
curve (the functions on the same plot)
}
我不知道如何制作MasterFun。我该怎么做呢?我是如何使内部函数只使用&#34;范围中的数字&#34;论点。
2)并且更复杂一点:如果函数有更多变量用于输入怎么办?例如,如果我使用像这样的函数
2^(2*k+n)
如何为该函数设置多个变量的范围?
3)如何为每个功能平均分配50个点?
4)如果我在函数内部给出范围怎么办?那个功能应该怎么样呢?
我只想用基本的R图形来做这件事。
答案 0 :(得分:2)
我们首先捕获dots
中的...参数,形成x
值以评估函数,然后计算y限制ylim
,宽度足以包含所有函数。最后运行曲线。我们在eval/substitute
内执行此操作,以绕过curve
使用的非标准评估。
Master <- function(..., Range = 0:1, n = 101, ylab = "", xname = "x",
env = parent.frame()) {
dots <- substitute(...())
x <- seq(Range[1], Range[2], length = n)
rng <- function(e) {
expr <- if (is.name(e)) {
call(as.character(e), as.name(xname))
} else {
if (!((is.call(e) || is.expression(e)) && xname %in%
all.vars(e)))
stop(
gettextf("'expr' must be a fun, or a call or an expr containing '%s'",
xname), domain = NA)
e
}
ll <- list(x = x)
names(ll) <- xname
y <- eval(expr, envir = ll, enclos = env)
range(y)
}
ylim <- range(c(sapply(dots, rng)))
for(i in seq_along(dots)) {
if (i > 1) par(new = TRUE)
eval(substitute(do.call(curve, list(dots[[i]],
from = Range[1], to = Range[2], n = n,
ylim = ylim, ylab = ylab))), env)
}
k <- 1}
Master(cos, 2*x, x+n+k)
给出:
已添加改进