gpt4 book ai didi

r - 将表达式作为变量传递给曲线

转载 作者:行者123 更新时间:2023-12-04 14:27:00 24 4
gpt4 key购买 nike

我正在尝试使用将函数名称存储为字符串的变量来绘制曲线。类似于以下内容:

f1 <- function(x) 0*x
f2 <- function(x) 1 + 0*x
f3 <- function(x) 2 + 0*x

fn <- "f1"

plot.new()
plot.window(xlim = c(0, 1), ylim = c(-1, 3))

curve(get(fn), add = TRUE)
Error in curve(get(fn), add = TRUE) :
'expr' must be a function, or a call or an expression containing 'x'

curve(f1, add = TRUE)
curve(f2, add = TRUE)
curve(f3, add = TRUE)

我知道我遗漏了一些东西 curve用替换处理表达式,或者如何处理 get正在传递函数。我特别困惑,因为 class(get(fn))返回“函数”。

最佳答案

嗯,问题是curve()不评估您传入的参数。它查看您传入参数的内容,而不是评估参数的结果。当你跑

curve(fn)

您传入的是“名称”(或“符号”)。这会触发函数查找具有该名称的函数。当你跑
curve(get("f1"))  #error

你已经通过了一个电话。同样,该调用不是由曲线执行以查看它返回一个函数。正如错误消息所说,如果您传入一个调用,该表达式应包含 x .例如
curve(f1(x))

是带有 x 的调用语法示例多变的。

如果确实需要将函数指定为字符向量,则可以将字符转换为名称对象,然后使用 do.call 构建对曲线的调用。例如
do.call("curve",list(as.name(fn)))

或者您可以修改您的调用以使用特殊的 x 触发结果函数多变的
curve(get(fn)(x))

关于r - 将表达式作为变量传递给曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28330974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com