jfm*_*yen 4 curve expression r
早上好,
我被困在 R 中字符串和表达式之间的类型转换。我想绘制一条曲线(使用 curve() 函数),其中一个由字符串定义的方程如下:
curve(x^3)
## Ok, generates a curve as expected
qq<-"x^3"
curve(qq)
Error in UseMethod("qq") :
no applicable method for 'qq' applied to an object of class "c('double', 'numeric')"
Run Code Online (Sandbox Code Playgroud)
我可以理解,第一个 arg 应该是一个表达式。
curve(expr=expression(qq))
Error in curve(expr = expression(qq)) :
'expr' must be a function, or a call or an expression containing 'x'
Run Code Online (Sandbox Code Playgroud)
我无法理解:我对这个人的 expression() 的理解是“... expression 返回一个包含其参数(未计算)的“表达式”类型的向量。”
那么,我必须怎么做才能用由字符串 qq 的内容定义的方程来绘制曲线?
谢谢
杰夫
curve 替换一开始的表达式:
substitute(expression(qq))
#expression(qq)
Run Code Online (Sandbox Code Playgroud)
形成这个它无法推断它需要什么:
all.vars(substitute(expression(qq)))
#[1] "qq"
all.vars(substitute(x^3))
#[1] "x"
Run Code Online (Sandbox Code Playgroud)
我认为你需要可怕的eval(parse()):
x <- 1:10
qq <- "x^3"
ff <- as.function(alist(x=, eval(parse(text=qq))))
curve(ff)
Run Code Online (Sandbox Code Playgroud)
编辑 (2020-09-21):
6 多年后,我会以不同的方式做这件事。我不喜欢 eval(parse())qq在这里,因为它会产生不必要的安全风险。相反,我会将其代入调用并评估对curve.
qq <- parse(text = qq)[[1]]
eval(substitute(curve(qq), list(qq = qq)))
Run Code Online (Sandbox Code Playgroud)