将多输出功能的单个输出分配给新功能

问题描述 投票:1回答:3

我有一个函数,给我一个输出,但是它由两个元素组成。例如:

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的多个值)。

r function plot output
3个回答
1
投票

似乎是seq的额外参数

x_grid <- seq(0, 1, 0.05)

2
投票

如果您正在寻找非基础的图形解决方案:

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")

2
投票

您的函数已向量化,因此您可以输入向量并通过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
© www.soinside.com 2019 - 2024. All rights reserved.