r - 用户定义的函数在 dplyr 管道中不起作用

标签 r function dplyr bioinformatics ncbi

我有一个带有蛋白质登录号的数据集 (DataGranulomeTidy)。我在 r 中写了一个函数 (extractInfo) 到 这些蛋白质的一些信息来自 ncbi 网站。当我在一个简短的“for”循环中运行它时,该函数按预期工作。

DataGranulomeTidy <- tibble(GIaccessionNumber = c("29436380", "4504165", "17318569"))

extractInfo <- function(GInumber){
    tempPage <- readLines(paste("https://www.ncbi.nlm.nih.gov/sviewer/viewer.fcgi?id=", GInumber, "&db=protein&report=genpept&conwithfeat=on&withparts=on&show-cdd=on&retmode=html&withmarkup=on&tool=portal&log$=seqview&maxdownloadsize=1000000", sep = ""), skipNul = TRUE)
    tempPage  <- base::paste(tempPage, collapse = "")
    Accession <- str_extract(tempPage, "(?<=ACCESSION).{3,20}(?=VERSION)")
    Symbol    <- str_extract(tempPage, "(?<=gene=\").{1,20}(?=\")")
    GeneID    <- str_extract(tempPage, "(?<=gov/gene/).{1,20}(?=\">)")
    out       <- paste(Symbol, Accession, GeneID, sep = "---")
    return(out)
}


for(n in 1:3){
    print(extractInfo(GInumber = DataGranulomeTidy$GIaccessionNumber[n]))
}
 [1] "MYH9---   AAH49849---4627"
 [1] "GSN---   NP_000168---2934"
 [1] "KRT1---   NP_006112---3848"
当我在 dplyr 管道中使用相同的功能时,我不起作用,我无法弄清楚为什么。
 > DataGranulomeTidy %>% mutate(NewVar = extractInfo(.$GIaccessionNumber))
 Error in file(con, "r") : argumento 'description' inválido
在这一点上,我可以通过使用“for”运算符在不使用“管道”运算符的情况下使事情工作,但我非常想了解为什么该函数在 dplyr 管道中不起作用。

最佳答案

这是您的UDF无法处理向量的原因。

vectorized_extractInfo <- Vectorize(extractInfo, "GInumber")

DataGranulomeTidy %>% 
  mutate(NewVar = vectorized_extractInfo(GIaccessionNumber))

关于r - 用户定义的函数在 dplyr 管道中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61267984/

相关文章:

c - 将对象数组传递给 Objective C 中的函数——并返回一个对象

r - SAS 宏到 R %sysfunc

r - 将多个模型公式应用于数据组

r - 提取R中两个逗号之间的单词

javascript - 使用类而不是使用抛出对象作为返回值的函数有什么优点?

r - sf 行之间点的距离

R:data.table 交叉连接不起作用

Javascript 立即函数和代码范围

r - 如何在给定时间段之间添加具有时间段的行?

r - 当没有非 NA 值时,汇总不会从最大值返回警告