【问题标题】:Plotting a Function with Indicator terms用指标项绘制函数
【发布时间】:2016-05-22 14:25:51
【问题描述】:

类似于问题here,假设我有一个向量x<-1:10,我想绘制公式

其中 I 是指示函数(例如,当 x_i ggplot2。

我该如何开始呢?这个公式的问题是我不知道如何处理R 中的条件函数,其值取决于向量的 individual 值,然后取这些的乘积会使问题复杂化更。我想有某种Vectorize 是生产产品所必需的,但我不知道如何开始。

【问题讨论】:

  • 我是否正确理解了你想要的函数 1/t * 2/t * 3/t * 4/t * 5/t * 6^2 * 7^2 * 8^2 * 9 ^2 * 10^2?
  • @Heroka 是的,没错。
  • @Heroka 我的意思是,我可以把它打出来,但我想把它概括为任何x
  • 我只是在检查,我的函数符号阅读能力生疏了。
  • 在基础 R 中有一个 prod 函数,可以将向量的所有元素相乘。

标签: r function ggplot2


【解决方案1】:

每种情况都不同,但在您的情况下,使用以下函数很容易处理 x 的个人值:

f <- function(t, x) prod((x <= 5) * x / t + (x > 5) * x^2)

它基于矢量化,例如比较 x &lt;= 5 按元素完成并返回一个逻辑向量。

library(ggplot2)
ts <- seq(1, 2, length = 1000)
data <- data.frame(t = ts, y = sapply(ts, f, x = 1:10))
ggplot(data = data, aes(x = t, y = y)) + geom_line()

使用stat_function,我们重新定义f,只接受一个参数(t),分别指定x,给出t的值范围,并使用Vectorize向量化f w.r.t。 t:

x <- 1:10
f <- function(t) prod((x <= 5) * x / t + (x > 5) * x^2)

library(ggplot2)
ggplot(data.frame(t = c(1, 2)), aes(t)) +
  stat_function(fun = Vectorize(f), geom = "line")

【讨论】:

  • 我很欣赏这个答案。谢谢你。您能否展示一下如何使用stat_function 来做到这一点?
【解决方案2】:

使用?Comparison 运算符构造指标函数非常简单。该产品中涉及的函数都是矢量化的,所以这可能就是您要寻找的:

> fI5 <- function(x, t=1.5) prod( (x <= 5)*x/t + (x>5)*x^2 )
> fI5(1:10)
[1] 14450688000

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-19
    • 2021-02-22
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多