使用指标术语绘制函数

时间:2016-02-11 17:05:56

标签: r function ggplot2

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

其中I是指标函数(例如,当x_i <= 5时,I(x_i <= 5)= 1,否则为0),并且x =(x_1,x_2,...,x_10)=(1 ,2,...,10)使用ggplot2

我怎么能开始呢?这个公式的问题是我不知道如何处理R中的条件函数,其值取决于向量的个别值,然后取这些复杂的乘积这个问题更是如此。我想有一些生产产品所必需的Vectorize,但我对如何开始感到迷茫。

2 个答案:

答案 0 :(得分:2)

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

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

它基于矢量化,例如比较x <= 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()

enter image description here

使用stat_function我们重新定义f只接受一个参数(t),分别指定x,提供一系列t的值,以及使用Vectorize来矢量化f wrt 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")

答案 1 :(得分:0)

使用?Comparison运算符构建指标函数非常简单。该产品内部涉及的功能都是矢量化的,所以这可能就是你要找的东西:

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