I'm trying to give it a look at the phytozome database in biomart, but just as I want to explore a list of known loci, the program returns an error message related to biomaRt webservice. I have tried changing the Mart from phytozome to ensembl, and seems to be related to that. However, I don't see how that connects to the error given, do you have any hints to helping fix this?

This is my code:

    library(biomaRt)
    mart <- useMart(biomart = "phytozome_mart", dataset = "phytozome", host = "phytozome.jgi.doe.gov")
    getBM(attributes = c("organism_name", "gene_name1"), filters = "gene_name_filter", values = "g400", mart = mart)
    getBM(attributes = "organism_name", mart = mart)

Which returns error message:

>NULL
>Error in .processResults(postRes, mart = mart, sep = sep, fullXmlQuery = fullXmlQuery,  : 
  The query to the BioMart webservice returned an invalid result.
The number of columns in the result table does not equal the number of attributes in the query.
Please report this on the support site at http://support.bioconductor.org

However, as mentoned above, I don't get this error if I try a similar approach with other databases, e.g. using Ensembl with pig data:

    mart <- useMart(biomart = "ensembl", dataset = "sscrofa_gene_ensembl")
    getBM(attributes = c("ensembl_gene_id"), mart = mart) %>% head

Should I really contact biomaRt support for this issue? Thank you
The solution here is to make sure you include `https://` in the host argument for Phytozome.  If that isn't included the query is redirected back to the main Phytozome page rather than the BioMart service, R receives the home page HTML rather than a results table, and thus it fails.

    library(biomaRt)
    mart <- useMart(biomart = "phytozome_mart", 
                    dataset = "phytozome", 
                    host = "https://phytozome.jgi.doe.gov")

    getBM(attributes = c("organism_name", "gene_name1"), 
          filters = "gene_name_filter", 
          values = "g400", 
          mart = mart)

    #> [1] organism_name gene_name1   
    #> <0 rows> (or 0-length row.names)

The value "g400" doesn't seem like a valid gene name and we get an empty result, but if we use one that does exist we get:

    getBM(attributes = c("organism_name", "gene_name1"), 
          filters = "gene_name_filter", 
          values = "82092", 
          mart = mart)

    #>     organism_name gene_name1
    #> 1 Smoellendorffii      82092

I would not recommend running the version without anything supplied to the `values` and `filters` arguments.  BioMart is not designed as a bulk data retrieval service and will probably fail (possibly without you realising by just omitting results).  Better to register with Phytozome and download directly.

I'll update the biomaRt vignette to highlight that `https://` needs to be set for Phytozome.