首页 > 解决方案 > 将绘图放入函数中

问题描述

我有以下功能:

    library(dplyr)

apply_fun <- function(data) {
  
  data %>%
    group_by(Type) %>%
    summarise(across(starts_with('x'), list(median = median, 
                                            first_quartile = ~quantile(., 0.25), 
                                            third_quartile = ~quantile(., 0.75))))
}

它为我提供了每列的数据集的中位数和第一和第三四分位数,对于每个“类型”,数据集的结构如下:

    Type    x1        x2      x3  ...
1:  type1   1.54    1.48    1.88    
2:  type2   1.46    1.99    1.48
3:  type1   2.01    1.02    1.03
...

该函数产生如下数据:

    x1_median   x1_first_quartile   x1_third_quartile   x2_first...
type1   1.505       1.122           ...
type2   1.488       1.026           ...
... ...

我有其他以相同方式构建的数据集。我想在函数中包含每个类型的中位数和四分位数与 x 值的图。x 值是列名中的数字,不一定从 1 开始。类似于:

在此处输入图像描述

我为一个特定的案例制作了这张图。

    plot(some_vector, unlist(FactorMedians[1, 2500]), type = "l", las = "1",
     main = "Median values by Factor")
lines(some_vector, unlist(FactorMedians[2, 2500]), type = "l")
lines(some_vector, unlist(FactorMedians[3, 2500]), type = "l")
lines(some_vector, unlist(FactorMedians[4, 2500]), type = "l")
lines(some_vector, unlist(FactorMedians[5, 2500]), type = "l")  

我不知道如何为此找到一般形式。

因子中位数计算如下:

library(dplyr)
    FactorMedians = mydata %>%
      group_by(Type) %>%
      summarise(across(starts_with('x'),
      median, probs = quant0, na.rm = TRUE))

如果我想要的不清楚,可以看看我之前的问题如何创建一个函数来计算每列数据、每个数据因子的中位数和四分位数?

标签: r

解决方案


你的意思是这样的?

# make dummy data
x <- 1:20
y <- data.frame(a=rnorm(20), b=rnorm(20), c=rnorm(20))



# prepare plot area
plot(NULL, xlim = range(x), ylim = range(y), xlab = "X", ylab = "Y")

# sapply ~= 'foreach', seq_len = sequence from 1 to n
sapply(seq_len(ncol(y)), function(i){
  lines(x, y[,i], type = "l", col = i)
})

产量

在此处输入图像描述


推荐阅读