r - 是否可以将可变长度的字符向量传递给 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")
谢谢!
解决方案
有很多方法可以做到这一点。我认为最简单的解决方案只涉及使用字符串向量。您也可以使用...
,但在您的示例中,这是一个不必要的并发症。我建议你data.table
或dplyr
语法:
数据表
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)
}
推荐阅读
- session - 在 ASP.NET Core 中使用 Response.Redirect 时,临时数据/会话始终为空
- angular - 在设置值之前等待方法完成
- if-statement - 涉及 Vlookup 和 IFNA 的多个 If 条件
- docker - 将多个 .yml 文件传递给 docker-compose
- javascript - 禁用按钮后不再执行 JavaScript
- c - 我不明白的 strcmp 的编译器优化,针对常量字符串
- kotlin - 在 kotlin 中如何避免?
- flutter - API 不工作/http 错误 SocketException:在发布版本中主机查找失败(在调试模式下工作)对于 Flutter
- javascript - 如果浏览器不支持本机 Promises,如何将微任务排队?
- mysql - 如何将 .docx 文件存储到 MySQL 中并打开它?