首页 > 解决方案 > 是否可以将可变长度的字符向量传递给 R 函数?

问题描述

在下面的函数中:

subset_data <- function(coldata, a, b){
    coldata <- coldata[, c(a, b)]
    return(coldata)
} 

c(a, b)只有两个元素,a并且b。是否可以使其灵活,以便用户可以传递任意数量的元素,即具有例如c(a, b, c, d)或任何其他可能性?

冷库的例子

sample tissue species time condition
s1 liver mouse morning treated
s2 liver mouse morning treated
s3 brain fly evening untreated

函数的使用

subset_data(coldata, d = c("tissue", "species")

期望的变化:

subset_data(coldata, d = c("tissue", "species", "time")

或者

subset_data(coldata, d = c("tissue", "species", "time", "condition")

谢谢!

标签: r

解决方案


有很多方法可以做到这一点。我认为最简单的解决方案只涉及使用字符串向量。您也可以使用...,但在您的示例中,这是一个不必要的并发症。我建议你data.tabledplyr语法:

数据表

library(data.table)
subset_data <- function(data, cols = c('a','b')){
  data2 <- data.table::as.data.table(data)
  return(data2[,.SD,.SDcols = cols])
}

dplyr

library(dplyr)
subset_data <- function(data, cols = c('a','b')){
  data %>% dplyr::select(cols)
}

推荐阅读