[R] How to loop over two files ...

Ana Marija
Sat, 20 Jun 2020 00:36:41 -0000

unfortunately it complains again:

> f1 <- read_tsv("1g", col_names=F)
Parsed with column specification:
cols(
  X1 = col_character()
)
> f2 <- read_tsv("1n", col_names=F)
Parsed with column specification:
cols(
  X1 = col_character()
)
> for ( a in rownames(f1) ) {
+
+    for ( b in rownames(f2) ) {
+
+ ext <- paste0( "/ld/human/pairwise/",
+                   f1[a,1],
+                   "/",
+                   f2[b,1],
+                   "?population_name=1000GENOMES:phase_3:KHV")
+
+                 r <- GET(paste(server, ext, sep = ""),
+ content_type("application/json"))
+
+                 write(r,file="list.txt",append=TRUE)
+
+
+    }
+
+ }
Error in cat(x, file = file, sep = c(rep.int(sep, ncolumns - 1),
"\n"),  :
  argument 1 (type 'list') cannot be handled by 'cat'

> traceback()
2: cat(x, file = file, sep = c(rep.int(sep, ncolumns - 1), "\n"),
       append = append)
1: write(r, file = "list.txt", append = TRUE)

On Fri, Jun 19, 2020 at 5:19 PM <cpolwart at chemo.org.uk>
wrote:
>
> Sorry - its been a long week!
>
> there is a foreach package but I try to avoid extras
>
> make your for statements:
>
> for ( a in rownames(f1) ) {
>
> # a will now be a row number rather than the value, so replace ' a
' in
> the paste0 with: f1[ a, 1]
>
> so
>
> ext <- paste0( "/ld/human/pairwise/",
>                   f1[a,1],
>                   "/",
>                   f2[b,1],
>                   "?population_name=1000GENOMES:phase_3:KHV")
>
> On 2020-06-19 22:54, Ana Marija wrote:
> > I tried it:
> >
> >  > library(httr)
> >> library(jsonlite)
> >> library(xml2)
> >> library(readr)
> >> server <- "http://rest.ensembl.org"
> >> f1 <- read_tsv("1g", col_names=F)
> > Parsed with column specification:
> > cols(
> >   X1 = col_character()
> > )
> >> f2 <- read_tsv("1n", col_names=F)
> > Parsed with column specification:
> > cols(
> >   X1 = col_character()
> > )
> >>
> >> for ( a in as.list(f1[,1]) ) {
> > +
> > +    for ( b in as.list(f2[,1]) ) {
> > +
> > + ext <- paste0( "/ld/human/pairwise/",
> > +                 a,
> > +                 "/",
> > +                 b,
> > +
"?population_name=1000GENOMES:phase_3:KHV")
> > +
> > +                 r <- GET(paste(server, ext, sep = ""),
> > + content_type("application/json"))
> > +
> > +                 write(r,file="list.txt",append=TRUE)
> > +
> > +
> > +    }
> > +
> > + }
> > Error in parse_url(url) : length(url) == 1 is not TRUE
> >
> >> traceback()
> > 10: stop(simpleError(msg, call = if (p <- sys.parent(1L))
sys.call(p)))
> > 9: stopifnot(length(url) == 1)
> > 8: parse_url(url)
> > 7: is.url(url)
> > 6: stopifnot(is.url(url))
> > 5: build_url(parse_url(url)[c("scheme",
"hostname", "port")])
> > 4: handle_name(url)
> > 3: handle_find(url)
> > 2: handle_url(handle, url, ...)
> > 1: GET(paste(server, ext, sep = ""),
content_type("application/json"))
> >
> > On Fri, Jun 19, 2020 at 4:41 PM <cpolwart at chemo.org.uk>
wrote:
> >>
> >> Oh - read.text isn't in base!  Not sure where is came from (my
head
> >> mostly!)  You may have something that adds it but better to use
> >> something that works.  So try using:
> >>
> >> library(readr)
> >> f1 <- read_tsv("1g.txt", col.names=F)
> >>
> >> This will give you a tibble with f1$X1 with the file in it
> >>
> >> then loop it with (a in as.list(f1[,1])
> >>
> >> Others will have much slicker code than me!
> >>
> >> On 2020-06-19 22:02, Ana Marija wrote:
> >> > Hi,
> >> >
> >> > thanks for getting back to me, it is just for my job :)
> >> >
> >> > so I tried it:
> >> >
> >> > library(httr)
> >> > library(jsonlite)
> >> > library(xml2)
> >> > library(SparkR, lib.loc =
c(file.path(Sys.getenv("SPARK_HOME"), "R",
> >> > "lib")))
> >> > sparkR.session(master = "local[*]", sparkConfig
> >> > list(spark.driver.memory = "2g"))
> >> >
> >> > server <- "http://rest.ensembl.org"
> >> >
> >> > f1 <- read.text("1g.txt")
> >> > f2 <- read.text("1n.txt")
> >> >
> >> > for ( a in as.list(f1) ) {
> >> >
> >> >    for ( b in as.list(f2) ) {
> >> >
> >> > ext <- paste0( "/ld/human/pairwise/",
> >> >                 a,
> >> >                 "/",
> >> >                 b,
> >> >
"?population_name=1000GENOMES:phase_3:KHV")
> >> >
> >> >                 r <- GET(paste(server, ext, sep =
""),
> >> > content_type("application/json"))
> >> >
> >> >
write(r,file="list.txt",append=TRUE)
> >> >
> >> >
> >> >    }
> >> >
> >> > }
> >> >
> >> > and I got this error:
> >> > Error in as.list.default(f1) :
> >> >   no method for coercing this S4 class to a vector
> >> >
> >> > Please advise
> >> >
> >> > On Fri, Jun 19, 2020 at 3:28 PM <cpolwart at
chemo.org.uk> wrote:
> >> >>
> >> >> so (untested) if you did something like
> >> >>
> >> >> f1 <- read.text("1g.txt")
> >> >> f2 <- read.text("1n.txt")
> >> >>
> >> >> for ( a in as.list(f1) ) {
> >> >>
> >> >>    for ( b in as.list(f2) ) {
> >> >>
> >> >> ext <- paste0( "/ld/human/pairwise/",
> >> >>                 a,
> >> >>                 "/",
> >> >>                 b,
> >> >>
"?population_name=1000GENOMES:phase_3:KHV")
> >> >>
> >> >>                 r <- GET(paste(server, ext, sep =
""),
> >> >> content_type("application/json"))
> >> >>
> >> >>                 # You presumably need to do something
with 'r' at the
> >> >> moment its over written by the next loop..  were
> >> >>                 # you appending it to list.txt?  Possibly
its just a
> >> >> bit
> >> >> of the R output you want.?
> >> >>
> >> >>
write(r,file="list.txt",append=TRUE)
> >> >>
> >> >>
> >> >>    }
> >> >>
> >> >> }
> >> >>
> >> >>
> >> >> Are we doing your PhD for you ;-)  Do we get to share ;-)
> >> >>
> >> >>
> >> >> On 2020-06-19 20:34, Ana Marija wrote:
> >> >> > Hello,
> >> >> >
> >> >> > I have two files (each has 300 lines)like this:
> >> >> >
> >> >> > head 1g.txt
> >> >> > rs6792369
> >> >> > rs1414517
> >> >> > rs16857712
> >> >> > rs16857703
> >> >> > rs12239392
> >> >> > ...
> >> >> >
> >> >> > head 1n.txt
> >> >> > rs1042779
> >> >> > rs2360630
> >> >> > rs10753597
> >> >> > rs7549096
> >> >> > rs2343491
> >> >> > ...
> >> >> >
> >> >> > For each pair of rs# from those two files I can run
this command in R
> >> >> >
> >> >> > library(httr)
> >> >> > library(jsonlite)
> >> >> > library(xml2)
> >> >> >
> >> >> > server <- "http://rest.ensembl.org"
> >> >> > ext <-
> >> >> >
"/ld/human/pairwise/rs6792369/rs1042779?population_name=1000GENOMES:phase_3:KHV"
> >> >> >
> >> >> > r <- GET(paste(server, ext, sep = ""),
> >> >> > content_type("application/json"))
> >> >> >
> >> >> > stop_for_status(r)
> >> >> > head(fromJSON(toJSON(content(r))))
> >> >> >    d_prime       r2 variation1 variation2
population_name
> >> >> > 1 0.975513 0.951626  rs6792369  rs1042779
1000GENOMES:phase_3:KHV
> >> >> >
> >> >> > What I would like to do is to do is to run this
command for every SNP
> >> >> > in one list (1g.txt) to each SNP in another list
(1n.txt). Where SNP#
> >> >> > is rs# and output every line of result in list.txt
> >> >> >
> >> >> > The process is illustrated in the attachment.
> >> >> >
> >> >> > Please help,
> >> >> > Ana
> >> >> >
> >> >> > ______________________________________________
> >> >> > R-help at r-project.org mailing list -- To
UNSUBSCRIBE and more, see
> >> >> > https://stat.ethz.ch/mailman/listinfo/r-help
> >> >> > PLEASE do read the posting guide
> >> >> > http://www.R-project.org/posting-guide.html
> >> >> > and provide commented, minimal, self-contained,
reproducible code.