Perform a function on several FASTA files R (Biostrings) Error in Call2(new_input_ExternalFilePtr", fp, PACKAGE = "Biostrings")
1
0
Entering edit mode
@kevindebray-12236
Last seen 7.2 years ago

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!

biostrings fasta R Call2 • 3.0k views
ADD COMMENT
1
Entering edit mode
@martin-morgan-1513
Last seen 2 days ago
United States

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 COMMENT
0
Entering edit mode

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 REPLY

Login before adding your answer.

Traffic: 552 users visited in the last hour
Help About
FAQ
Access RSS
API
Stats

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.

Powered by the version 2.3.6