aris
1
Hi,
A biostar user helped me with a code to help me download fasta files
from KEGG. The code is named get_fasta4
-----CODE START HERE--------
#!/usr/bin/env ruby
require “rubygems”
require “bio”
serv = Bio::KEGG::API.new
search for xac + hypothetical
xac = serv.bfind(“T00084 hypothetical”)
get the IDS into an array
ids = xac.map { |gene| $1 if gene =~/^(.*?)\s+/ }
retrieve fasta and print
ids.each { |id| puts serv.bget("-f -n 1 #{id}") }
-----CODE END HERE--------
However, in my system, Debian Testing, I got an error:
marcelo@marcelo:~$ get_fasta4
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in require': iconv will be deprecated in the future, use String#encode instead. /home/marcelo/bin/scripts/get_fasta4:10:in
‘: undefined method
`map’ for #String:0x87a9f38 (NoMethodError)
marcelo@marcelo:~$
marcelo@marcelo:~$ ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [i486-linux]
marcelo@marcelo:~$
marcelo@marcelo:~$ gem search soap
*** LOCAL GEMS ***
soap4r (1.5.8)
soap4r-ruby1.9 (2.0.5)
soap4r-ruby19 (1.5.9)
marcelo@marcelo:~$
Could you help me?
Thank you very much!
On 5/11/2012, at 10:35 AM, Marcelo L. [email protected] wrote:
It’s telling you what the problem is.
search for xac + hypothetical
xac = serv.bfind(“T00084 hypothetical”)
get the IDS into an array
ids = xac.map { |gene| $1 if gene =~/^(.*?)\s+/ }
retrieve fasta and print
ids.each { |id| puts serv.bget(“-f -n 1 #{id}”) }
-----CODE END HERE--------
/home/marcelo/bin/scripts/get_fasta4:10:in <main>': undefined method
map’ for #String:0x87a9f38 (NoMethodError)
xac is a String which doesn’t have a method ‘map’. ‘map’ expects an
Array. You can either force xac to be an Array
ids = Array(xac).map { |gene| $1 if gene =~/^(.*?)\s+/ }
or fix the previous line to return an array.
Henry
On Nov 4, 2012, at 14:15 , Henry M. [email protected] wrote:
ids.each { |id| puts serv.bget(“-f -n 1 #{id}”) }
-----CODE END HERE--------
/home/marcelo/bin/scripts/get_fasta4:10:in <main>': undefined method
map’ for #String:0x87a9f38 (NoMethodError)
xac is a String which doesn’t have a method ‘map’. ‘map’ expects an Array.
#map is a member of Enumerable, not just Array. String used to be
Enumerable in 1.8-, but it isn’t in 1.9+
10000 % irb
String.ancestors
=> [String, Enumerable, Comparable, Object, Kernel]
10001 % irb19
String.ancestors
=> [String, Comparable, Object, Kernel, BasicObject]
You can either force xac to be an Array
ids = Array(xac).map { |gene| $1 if gene =~/^(.*?)\s+/ }
xac.lines.map is clearer.
There should probably also be a #compact since the regexp could
potentially not match.