繁体   English   中英

将lapply与多个参数的自定义函数一起使用

[英]Use of lapply with custom functions of several arguments

我在将lapply与我创建的自定义函数一起使用时遇到了麻烦,但这是一个相当具体的函数,我一直无法找到适合我的答案。

该函数很长,可以完成很多事情,但是我认为我已经将其缩小为一个可重现的示例,给出了我遇到的错误。

问题是,我有一个包含两种不同类型文件的文件夹,我想将其作为列表元素加载到R中。 它们或多或少具有相同的信息,但是它们具有不同的布局,不同的文件扩展名,几乎所有内容都不同,因此每种类型的导入过程都不同。

该函数如下所示:

f <- function(a_file, b_file, type){
if (type == "a"){act <- read.table(a_file, skip = 19, header = TRUE, sep = "", dec = ".")}
if (type == "b"){act <- read.table(b_file, header=FALSE, sep="\t", dec=".")}
return(act)}

然后,使用要调用的两种文件类型的名称创建矢量,如下所示:

a_files <- dir(pattern=".deg")
b_files <- dir(pattern=".act")

最后尝试应用如下功能:

act_list <- lapply(a_files, f, b_files, type = "b")

如果type = "a" ,但是对于type = "b"失败,给出错误:

Error in file(file, "rt") : invalid 'description' argument

我敢肯定,这与我仅将该函数应用于“ a_files”向量而不是“ b_files”这个事实有关,但是我尽我所能设法解决此问题。 ..

有一种更简单的方法可以解决您的问题。

首先,将函数定义为文件名仅具有一个参数。
然后在其中确定文件是哪种类型,并进行正确的读取类型。

readFiles = function(file){
    if(grepl(file,pattern = "\\.deg")){
        act <- read.table(a_file, skip = 19, header = TRUE, sep = "", dec = ".")
    }
    if(grepl(file,pattern = "\\.act")){
        act <- read.table(b_file, header=FALSE, sep="\t", dec=".")
    }
    return(act)
}

最后,您只需要在文件向量上调用lapply

filesVector = dir(pattern = "(\\.act|\\.deg)")
result = lapply(filesVector, readFiles)

filesVector将返回所有包含“ .act”或“ .deg”的文件。
注意:您的模式不正确,因为它将返回包含任何字符后跟“ ​​act”或“ deg”的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM