--- a
+++ b/R/XenaQueryProbeMap.R
@@ -0,0 +1,39 @@
+##' Query ProbeMap URL of Datasets
+##'
+##' If dataset has no ProbeMap, it will be ignored.
+##'
+##' @author Shixiang Wang <w_shixiang@163.com>
+##' @param x a [XenaHub] object
+##' @return a `data.frame` contains hosts, datasets and url
+##' @importFrom dplyr filter select pull rename mutate
+##' @export
+##' @examples
+##' xe = XenaGenerate(subset = XenaHostNames == "tcgaHub")
+##' hosts(xe)
+##' \dontrun{
+##' xe_query = XenaQueryProbeMap(xe)
+##' }
+XenaQueryProbeMap <- function(x) {
+  message("Check ProbeMap urls of datasets.")
+  datasetsName <- datasets(x)
+  query <- UCSCXenaTools::XenaData %>%
+    dplyr::filter((XenaDatasets %in% datasetsName) & (!is.na(ProbeMap)))
+
+  if (nrow(query) == 0) {
+    invisible(data.frame(stringsAsFactors = FALSE))
+  } else {
+    query <- query %>%
+      dplyr::rename(hosts = XenaHosts, datasets = ProbeMap) %>%
+      dplyr::mutate(url = ifelse(.data$XenaHostNames %in% c("gdcHub", "gdcHubV18"),
+        file.path(hosts, "download", url_encode(basename(datasets))),
+        file.path(hosts, "download", url_encode(datasets))
+      )) %>%
+      dplyr::mutate(url = ifelse(!sapply(url, http_error2),
+        url, paste0(url, ".gz")
+      )) %>%
+      dplyr::select(hosts, datasets, url) %>%
+      as.data.frame()
+
+    invisible(unique(query))
+  }
+}