Search
Question: Perform a function on several FASTA files R (Biostrings) Error in Call2(new_input_ExternalFilePtr", fp, PACKAGE = "Biostrings")
0
gravatar for kevin.debray
9 months ago by
kevin.debray0 wrote:

Hello everyone!

I need to perform a function on several fasta files located in the same folder. I first created a file object which lists the files names present in the Rtest folder.

files <- list.files(path="~/R/Rtest")

Then I put my script into a function called genWS. The first step of this function is to import the files one by one to perform a series of actions on them.

genWS <- function(input) {
x<-readDNAStringSet(file="input", format="fasta")
...
}

At the end of the script I put a FOR loop to go on the next fasta file.

for (j in 1:length(files)) {
  genWS(files[j])
}

My problem is that I got this error when I try to run the whole script despite it works fine when I import fasta file one by one manually.

Error in .Call2("new_input_ExternalFilePtr", fp, PACKAGE = "Biostrings") : 
  cannot open file 'input'
Called from: .Call2("new_input_ExternalFilePtr", fp, PACKAGE = "Biostrings")

Any idea of what happen and how to solve it ?

Thanks!

ADD COMMENTlink modified 9 months ago by Martin Morgan ♦♦ 20k • written 9 months ago by kevin.debray0
1
gravatar for Martin Morgan
9 months ago by
Martin Morgan ♦♦ 20k
United States
Martin Morgan ♦♦ 20k wrote:

Use readDNAStringSet(file=input, ...) i.e., the variable, rather than a character string "input".

Unrelated to your problem, but R knows how to iterate over vectors, so the loop can be written

for (file in files)
    genWS(file)

Usually 1:length(x) is the wrong thing to do -- it produces surprising results when length(x) equals 0 -- and a better practice would use seq_along()  or seq_len().

ADD COMMENTlink written 9 months ago by Martin Morgan ♦♦ 20k

Also FWIW note that you can load all your files at once by passing all their paths to readDNAStringSet() e.g. readDNAStringSet(files) where files is the character vector you obtained with list.files(path="~/R/Rtest"). So, depending on what you need to do with the sequences, and granted that you have enough memory to load them all, it might be that you don't need a loop at all.

H.

ADD REPLYlink written 9 months ago by Hervé Pagès ♦♦ 13k
Please log in to add an answer.

Help
Access

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.
Powered by Biostar version 2.2.0
Traffic: 113 users visited in the last hour