我有一个函数,给我一个输出,但是它由两个元素组成。例如:
example <- function(x){
sin <- sin(x)
cos <- cos(x)
output <- cbind(sin, cos)
return(output)
}
现在,我的想法是分别绘制正弦和余弦,分别作为x的函数。我希望避免在这种情况下编写单独的函数,因为最好同时计算两个对象。如果我尝试:
x_grid = seq(0,1,0,0.05)
plot(x_grid, sapply(x_grid, FUN = example[1]))
我收到以下错误消息:
example [1]中的错误:'closure'类型的对象不可子集化
然后如何进行? (请注意,我使用sapply
是因为我需要我的函数来处理实际情况下x的多个值)。
似乎是seq
的额外参数
x_grid <- seq(0, 1, 0.05)
如果您正在寻找非基础的图形解决方案:
library(ggplot2)
example3 <- function(x){
data.frame(
x = x,
sin = sin(x),
cos = cos(x)
)
}
x_grid=seq(0,1,0.05)
ggplot(data = example3(x_grid),
aes(x=x)) +
geom_line(aes(y = sin), color = "blue") +
geom_line(aes(y = cos), color = "red")
您的函数已向量化,因此您可以输入向量并通过example(x_grid)[, "sin"]
或example(x_grid)[, "cos"]
提取每一列。
example(x_grid)
# sin cos
# [1,] 0.000000000 1.000000000
# [2,] 0.049979169 0.998750260
# [3,] 0.099833417 0.995004165