我制作了一个定制函数PharmgPlot,它通过 colored颜色 变量绘制药物react 数据和 colored颜色 ,并通过不同的变量更改线型.以下是运行此函数的简化代码:

# func to plot drug response
drugPlot <- function(df, drug, colorByVar, lineTypeVar){
  x<- df %>%
    filter(drug == !!drug) %>% 
           ggplot(aes(x = drugDose, y = viability, color=as.factor(.data[[colorByVar]]), linetype = as.factor(.data[[lineTypeVar]])) )+
                    labs( x = "Dose ", y = "Viability", color = colorByVar, linetype= lineTypeVar)+
      geom_point(size = 0.6)+
      geom_smooth( se=F, size = 0.5)
  
  return(x)
}

# example df
df <- data.frame(
   cellLine = rep(c("CellLine1", "CellLine2"), each = 4),
     subtype = rep(c("SubtypeA", "SubtypeB"), each = 4),
     drug = rep(c("DrugA", "DrugB", "DrugC"), each = 4 * 2),
     drugDose = rep(seq(1, 10, length.out = 4), 6),
     viability = rnorm(4 * 6, mean = 80, sd = 10)
 )
# run the func
 drugPlot(df, "DrugA", colorByVar = "subtype", lineTypeVar = "cellLine")

我的问题是:有没有方法可以使线型或 colored颜色 变量为空?我反复使用这个函数,有时我希望 colored颜色 和线型都有变量,但有时我只想要 colored颜色 .有没有一种方法可以在不创建新函数的情况下做到这一点?

我try 设置lineTypeVar=na,"",c(),但每次都出错.

谢谢!

推荐答案

使用if并将两个可选参数的默认值都设置为NULL,您可以这样做:

# example df
df <- data.frame(
  cellLine = rep(c("CellLine1", "CellLine2"), each = 4),
  subtype = rep(c("SubtypeA", "SubtypeB"), each = 4),
  drug = rep(c("DrugA", "DrugB", "DrugC"), each = 4 * 2),
  drugDose = rep(seq(1, 10, length.out = 4), 6),
  viability = rnorm(4 * 6, mean = 80, sd = 10)
)

library(dplyr, warn = FALSE)
library(ggplot2)

drugPlot <- function(df,
                     drug,
                     colorByVar = NULL,
                     lineTypeVar = NULL) {
  df %>%
    filter(drug %in% .env$drug) %>%
    ggplot(aes(
      x = drugDose, y = viability,
      color = if (!is.null(colorByVar)) as.factor(.data[[colorByVar]]),
      linetype = if (!is.null(lineTypeVar)) as.factor(.data[[lineTypeVar]]),
    )) +
    labs(x = "Dose ", y = "Viability", color = colorByVar, linetype = lineTypeVar) +
    geom_point(size = 0.6) +
    geom_smooth(se = F, size = 0.5)
}

drugPlot(df, "DrugA", colorByVar = "subtype", lineTypeVar = "cellLine")


drugPlot(df, "DrugA", colorByVar = "subtype")


drugPlot(df, "DrugA")

R相关问答推荐

在ComplexHeatmap中,如何更改anno_barplot()标题的Angular ?

为什么以及如何修复Mapview不显示所有点并且st_buffer合并一些区域R?

R形式的一维数字线/箱形图样式图表

对lme 4对象运行summary()时出错(diag中的错误(from,names = RST):对象unpackedMatrix_diag_get找不到)

手动打印线型gplot

derrr mutate case_when grepl不能在R中正确返回值

使用Facet_WRAP时更改框图中线的 colored颜色

R如何计算现有行的总和以添加新的数据行

按列中显示的配对组估算NA值

远离理论值的伽马密度曲线下面积的近似

层次树图的数据树

R预测包如何处理ARIMA(Auto.arima函数)中的缺失值

排序R矩阵的行和列

如何在访问之前下载的输入时同时上传和处理所有指定的shiny 输入?

策略表单连接两个非常大的箭头数据集,而不会 destruct 内存使用

在R中,有没有什么方法可以根据一列中的多个值来过滤行?

使用nls()函数的非线性模型的半正态图

GgHighlight找不到它创建的列:`Highlight..1`->;`Highlight.....`

如何使用ggsurvfit包更改风险表中的标签名称?

按顺序将地块添加到列表