【发布时间】:2018-01-01 10:34:24
【问题描述】:
当函数的输出是一个简单的表达式(例如单个数字)时,我熟悉使用函数curve 在 R 中绘制函数。我们如何处理输出有点复杂的函数,比如列表?
一个让我自己清楚的例子。假设我有以下功能。
f <- function(a,b,c,d){
check <- a
prob <- c:d
n <- c*2
r <- d-b
lista <- list(check,prob,n,r)
names(lista) <- c("check", "prob", "n", "r")
return(lista)
}
f <- Vectorize(f, vectorize.args = "a")
如何使用函数curve 来绘制输出列表中的一个元素的结果,比如n,作为a 的函数?如果我将返回设置为 onlyn,这将非常顺利,但如果我想保留当前列表输出用于其他目的怎么办?
我检查了?curve,它指出,相当令人沮丧的是,
对于计算成本高昂的表达式,您应该使用更智能的工具
不要认为这是适用的情况,但实际上,正如帮助页面所建议的那样,“方式curvehandlesexpr已经引起了混乱”。
一种天真的方法是调用
curve(f(x, b= 2, c= 3, d=1)$n)
但这似乎并没有起到作用。无需更改函数输出或不必使用“ggplot”和排序的任何解决方案?
【问题讨论】:
-
你有什么理由不使用
plot?curve只是plot的包装,所以看不出为什么要坚持使用curve。例如,只需一个简单的plot(x,f(x, b= 2, c= 3, d=1)$n,ty="l")即可让您接近使用curve获得的图。 -
@nicola 我想这样做,而不必指定传递给函数的可能值的向量。我提供的例子是一个假人;我正在使用的真正功能要复杂得多。这是一个阶跃函数,我不知道它跳到哪里。另外,我很想揭开
curve的奥秘 -
curve()采用参数方式。如果 ggplot2 采用原始 JSON 并在不指定geoms 的情况下为我制作神奇的情节,我会很高兴,但这不会发生。curve有0奥秘。在 R 控制台输入curve,按 Enter。您的问题不完整,因为您从未向我们提供x的向量。 -
@Easymode44 阅读文档以了解如何计算点数。它们只是
seq(from,to,length.out=n),其中from、to和n是您传递给curve的参数。如果您不传递这些值,from=0、to=1和n=101(除非您正在绘制现有地块)。所以只需使用plot。 -
@hrbrmstr 我会听从您的建议并深入阅读
curve(尽管我希望从 Stackoverflow 获得更深入的提示 - 注意详细说明“参数方面”)。我不需要指定x。如果把函数中的return改成return(n),我就可以顺利使用curve,以x为横坐标。