与问题here类似,假设我有一个向量x<-1:10
,我想绘制公式
其中I是指标函数(例如,当x_i <= 5时,I(x_i <= 5)= 1,否则为0),并且x =(x_1,x_2,...,x_10)=(1 ,2,...,10)使用ggplot2
。
我怎么能开始呢?这个公式的问题是我不知道如何处理R
中的条件函数,其值取决于向量的个别值,然后取这些复杂的乘积这个问题更是如此。我想有一些生产产品所必需的Vectorize
,但我对如何开始感到迷茫。
答案 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()
使用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