使用readr时如何使用通配符定义col_type?

How to use wildcards to define col_type when using readr?

我前几天刚问过,如何在使用readr包时设置特定的列类型。 big integers when reading file with readr in r

有没有办法通过通配符定义列名?在我的例子中,有时我有几个以 Intensity 开头的列和一个附录,具体取决于实验。如果您事先不知道使用了哪些项目名称,则很难在函数中使用 read_tsv

所以像 col_types = cols('Intensity.*' = col_double()) 这样的东西会很棒。

有人知道如何获得此功能吗?

编辑: 也许像阅读前两行,names 中的 grep 'Intensity',然后以某种方式创建此参数,如 cols(Intensity=col_double(), 'Intensity pg'=col_double(), 'Intensity hs'=col_double())。 但是我不知道如何即时创建这个参数值。

我根据 lukeA 的评论添加了解决我问题的答案...

read_MQtsv <- function(file) {
  require('readr')
  jnk <- read.delim(file, nrows=1, check.names=FALSE)
  matches <- grep('Intensity|LFQ|iBAQ', names(jnk), value=TRUE)
  read_tsv(file, 
           col_types=setNames(
             rep(list(col_double()), length(matches)), 
             matches))
}

所以我将注释中的单行改编成一个新函数,我在读取由名为 MaxQuant.

的程序生成的特殊文件时会使用该函数