{"action":"created","comment":{"url":"https://api.github.com/repos/thehyve/heim-SmartR/pulls/comments/45354298","id":45354298,"diff_hunk":"@@ -0,0 +1,192 @@\n+###########\n+## R-script to produce summary statistics (mean, median, etc.,) and static boxplot image for the data loading and data preprocessing tab\n+#\n+# Expected input: \n+# * variable \"loaded_variables\" - a list of data.frames, containing one or more data.frames. Present in the environment.\n+#   Data for multiple high dimensional nodes can be provided. \n+#   Per high dimensional node 1 or 2 dataframes are to be passed on, depending on whether 1 or 2 patient subsets are created. \n+#   Descriptive names (labels) are given to the data.frames so that it can be recognized which data.frame was derived from which data node\n+#   PROPOSED FORMAT: some unique identifier for the node (numerical identifier appended behind the letter \"n\") followed by _s1 or _s2 depending on subset, e.g. n0_s1, n0_s2, n1_s1, n1_s2. \n+#         (RIGHT NOW THE UNDERSCORE IS USED FOR SPLITTING THE TWO, SO IF UNDERSCORES ARE USED IN THE NODE IDENTIFIER ,THIS SHOULD BE CHANGED)\n+#   The data.frames (coming from high dimensional nodes) have columns: Row.Label, Bio.marker (optional), ASSAY_0001, ASSAY_0002 ...  \n+#     ** right now this is only implemented for high dimensional data nodes, later the functionality might be extended for clinical data. In that case it is possible to recognize if it is high or low dim data based on the column names of the data.frame (assuming low dim data will also be passed on in the form of data.frames)\n+# * a named (labeled) vector with the definitions of the selected subset(s) (used for labeling the subsets in the boxplot) (e.g.: (s1 = \"F\", s2 = \"M\" )). Passed on as argument to main() \n+#\n+# Output: \n+# * 1 boxplot image per data node, png format. Name: Box_plot_Node_<Node Identifier>.png. \n+# * 1 textfile per node with the summary statistics per subset, in json format. Name: Summary_stats-Node_<Node Identifier>.json. \\\n+# Note: If the data node is not high dimensional or the dataset is empty, no boxplot will be returned - only an image with the text \"No data points to plot\", \n+#   also no mean, median etc will be returned in the summary statistics: only variableLabel, node name and subset name are returned \n+#   and totalNumberOfValues = 1 and numberOfMissingValues = 1.\n+###########\n+\n+library(jsonlite)\n+library(gplots)\n+\n+main <- function(subset_definitions)\n+{\n+  data_measurements <- extract_measurements(loaded_variables)\n+  produce_summary_stats(data_measurements)\n+  produce_boxplot(data_measurements, subset_definitions)\n+}\n+\n+\n+# Extract the measurement values from the data.frames.\n+#  The data.frames (coming from high dimensional nodes) have columns: Row.Label, Bio.marker (optional), ASSAY_0001, ASSAY_0002 ...  \n+#  All columns except Row.Label and Bio.marker contain the measurement values.\n+extract_measurements <- function(datasets)\n+{  \n+  for(i in 1:length(datasets))\n+  {\n+    dataset <- datasets[[i]]\n+    colNames <- colnames(dataset)\n+    \n+    # test if the data.frame contains data from a high dimensional data node\n+    #   the first column of the data from high dimensional nodes should be \"Row.Label\", a second column called \"Bio.marker\" is optional.\n+    #   for low dimensional data these columns will contain different names \n+    is_highDim <- (colNames[1] == \"Row.Label\")\n+    \n+    # if it is not high dim, then it is clinical data. Right now this script is only written to handle high dimensional data.\n+    if(!is_highDim)\n+    {\n+      datasets[[i]] <- NA\n+    }\n+    \n+    # only keep the measurement values, by removing the row label and biomarker columns\n+    if(is_highDim)\n+    {\n+      non_measurement_columns <- which(colNames %in% c(\"Row.Label\",\"Bio.marker\"))\n+      datasets[[i]] <- dataset[ ,-non_measurement_columns]\n+    }\n+  }\n+  \n+  return(datasets) \n+}\n+\n+\n+# Function to produce one JSON file per data node containing the summary stats per subset for that node. Summary stats include: the number of values, number of missing values quartiles, min, max, mean, std deviation, median\n+# NOTE: this function converts the data.frame to a vector containing all datapoints from the dataframe and calculates the statistics over this vector\n+#       The statistics are thus not calculated per data column or row, but over the whole data.frame\n+# NOTE 2: quartiles, mean and other statistics can only be calculated on numeric data. If this method is extended for clinical data: \n+#         * Are the desired summary statistics the same for clinical data (ie. mean, sd, median, etc.) or should different stats be calculated?\n+#         * extend this method to recognize low dim data and split up the data.frame or apply this method to each data column separately to calculate the statistics per clinical variable separately (ie. supply the clinical data as a list containing a separate data.frame/vector for each clinical variable)\n+#         * build in  a test to determine if a variable is numeric or categorical and only calculate the statistics if numeric. \n+#         * If a variable is categorical: are missing values in that case NA or  \"\" (empty string? )\n+produce_summary_stats <- function(measurement_tables)\n+{\n+  # construct data.frame to store the results from the summary statistics in\n+  result_table <- as.data.frame(matrix(NA, length(measurement_tables),12, \n+                                       dimnames = list(names(measurement_tables), \n+                                                       c(\"variableLabel\",\"node\",\"subset\",\"totalNumberOfValuesIncludingMissing\", \"numberOfMissingValues\", \"min\",\"max\",\"mean\", \"standardDeviation\", \"q1\",\"median\",\"q3\"))))\n+  # add information about node and subset identifiers\n+  result_table$subset <- gsub(\".*_\",\"\", rownames(result_table))\n+  result_table$node <- gsub(\"_.*\",\"\", rownames(result_table))\n+  \n+  # calculate summary stats per data.frame\n+  for(i in 1:length(measurement_tables))\n+  {\n+    # get the name of the data.frame, identifying the node and subset \n+    identifier <- names(measurement_tables)[i]\n+    result_table[identifier, \"variableLabel\"] <- identifier\n+    \n+    # convert data.frame to a vector containing all values of that data.frame, a vector remains a vector\n+    measurements <- unlist(measurement_tables[[i]])\n+    \n+    # determine total number of values and number of missing values\n+    is.missing <- is.na(measurements)\n+    result_table[identifier, \"totalNumberOfValuesIncludingMissing\"] <- length(measurements)\n+    result_table[identifier, \"numberOfMissingValues\"] <- length(which(is.missing))\n+    \n+    # calculate descriptive statistics, only for numerical data. \n+    # the 50% quantile is the median. 0 and 100% quartiles are min and max respectively\n+    result_table[identifier, \"mean\"] <- mean(measurements, na.rm=T)\n+    result_table[identifier, \"standardDeviation\"] <- sd(measurements, na.rm=T)\n+    \n+    quartiles <- quantile(measurements, na.rm=T) \n+    result_table[identifier, \"min\"] <- quartiles[\"0%\"]\n+    result_table[identifier, \"max\"] <- quartiles[\"100%\"]\n+    result_table[identifier, \"q1\"] <- quartiles[\"25%\"]\n+    result_table[identifier, \"median\"] <- quartiles[\"50%\"]\n+    result_table[identifier, \"q3\"] <- quartiles[\"75%\"]    \n+  }\n+  \n+  # remove rownames so that rownames are not included in the JSON output.\n+  rownames(result_table) <- 1:nrow(result_table)\n+  \n+  # write the summary statistics for each node to a separate file, in JSON format\n+  unique_nodes <- unique(result_table$node)\n+  for(node in unique_nodes)\n+  {\n+    partial_table <- result_table[which(result_table$node == node), ,drop = F]\n+    summary_stats_JSON <- toJSON(partial_table, dataframe = \"rows\", pretty = T)\n+    fileName <- paste(\"Summary_stats-Node_\", node, \".json\", sep = \"\")\n+    write(summary_stats_JSON, fileName)\n+  }\n+}\n+\n+# Function that outputs one box plot image per data node\n+produce_boxplot <- function(measurement_tables, subset_def)\n+{\n+  #get node and subset identifiers\n+  nodes <- gsub(\"_.*\",\"\",names(measurement_tables))\n+  subsets <- gsub(\".*_\",\"\", names(measurement_tables))\n+  \n+  \n+  # convert the tables to vectors for use with the boxplot function\n+  # this converts a data.frame to a vector containing all values from the data.frame, a vector remains a vector \n+  measurement_vectors <- measurement_tables\n+  for(i in 1:length(measurement_vectors))\n+  {\n+    measurement_vectors[[i]] <- unlist(measurement_vectors[[i]]) \n+  }\n+  \n+  #make a separate boxplot for each node and write to a PNG file.\n+  for(node in nodes)\n+  {\n+    # grab the data.frames corresponding to the selected node\n+    identifiers_single_node <- grep(paste(\"^\",node, sep = \"\"), names(measurement_vectors), value = T )\n+    single_node_data <- measurement_vectors[identifiers_single_node]\n+    \n+    #remove node prefix from the names (labels) of the data.frame \n+    names(single_node_data) <-  gsub(\".*_\",\"\",names(single_node_data))\n+    \n+    #make sure the subsets are always ordered s1, s2, ...\n+    single_node_data <- single_node_data[order(names(single_node_data))] \n+    \n+    #replace subset identifiers by subset definition if the subset definition is given and matches the subset identifiers\n+    if(all(names(single_node_data) %in% names(subset_def))) \n+    {\n+      names(single_node_data) <- subset_def[names(single_node_data)]\n+    }\n+    \n+    ## create box plot, output to PNG file\n+    fileName <- paste(\"Box_plot-Node_\", node, \".png\", sep = \"\")    ","path":"web-app/HeimScripts/heatmap/summary.R","position":163,"original_position":163,"commit_id":"9ed9d9817b9a2c728f380474a2a8350be472b569","original_commit_id":"9ed9d9817b9a2c728f380474a2a8350be472b569","user":{"login":"rnugraha","id":2835281,"avatar_url":"https://avatars.githubusercontent.com/u/2835281?v=3","gravatar_id":"","url":"https://api.github.com/users/rnugraha","html_url":"https://github.com/rnugraha","followers_url":"https://api.github.com/users/rnugraha/followers","following_url":"https://api.github.com/users/rnugraha/following{/other_user}","gists_url":"https://api.github.com/users/rnugraha/gists{/gist_id}","starred_url":"https://api.github.com/users/rnugraha/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rnugraha/subscriptions","organizations_url":"https://api.github.com/users/rnugraha/orgs","repos_url":"https://api.github.com/users/rnugraha/repos","events_url":"https://api.github.com/users/rnugraha/events{/privacy}","received_events_url":"https://api.github.com/users/rnugraha/received_events","type":"User","site_admin":false},"body":"box_plot_node_xxx.png","created_at":"2015-11-19T15:28:02Z","updated_at":"2015-11-19T15:28:02Z","html_url":"https://github.com/thehyve/heim-SmartR/pull/31#discussion_r45354298","pull_request_url":"https://api.github.com/repos/thehyve/heim-SmartR/pulls/31","_links":{"self":{"href":"https://api.github.com/repos/thehyve/heim-SmartR/pulls/comments/45354298"},"html":{"href":"https://github.com/thehyve/heim-SmartR/pull/31#discussion_r45354298"},"pull_request":{"href":"https://api.github.com/repos/thehyve/heim-SmartR/pulls/31"}}},"pull_request":{"url":"https://api.github.com/repos/thehyve/heim-SmartR/pulls/31","id":51235367,"html_url":"https://github.com/thehyve/heim-SmartR/pull/31","diff_url":"https://github.com/thehyve/heim-SmartR/pull/31.diff","patch_url":"https://github.com/thehyve/heim-SmartR/pull/31.patch","issue_url":"https://api.github.com/repos/thehyve/heim-SmartR/issues/31","number":31,"state":"open","locked":false,"title":"Summary stats","user":{"login":"RianneJ","id":6952296,"avatar_url":"https://avatars.githubusercontent.com/u/6952296?v=3","gravatar_id":"","url":"https://api.github.com/users/RianneJ","html_url":"https://github.com/RianneJ","followers_url":"https://api.github.com/users/RianneJ/followers","following_url":"https://api.github.com/users/RianneJ/following{/other_user}","gists_url":"https://api.github.com/users/RianneJ/gists{/gist_id}","starred_url":"https://api.github.com/users/RianneJ/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RianneJ/subscriptions","organizations_url":"https://api.github.com/users/RianneJ/orgs","repos_url":"https://api.github.com/users/RianneJ/repos","events_url":"https://api.github.com/users/RianneJ/events{/privacy}","received_events_url":"https://api.github.com/users/RianneJ/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-11-19T15:18:35Z","updated_at":"2015-11-19T15:28:02Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c79f55702dd9aa1282cf49146665c51739bfd191","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/thehyve/heim-SmartR/pulls/31/commits","review_comments_url":"https://api.github.com/repos/thehyve/heim-SmartR/pulls/31/comments","review_comment_url":"https://api.github.com/repos/thehyve/heim-SmartR/pulls/comments{/number}","comments_url":"https://api.github.com/repos/thehyve/heim-SmartR/issues/31/comments","statuses_url":"https://api.github.com/repos/thehyve/heim-SmartR/statuses/9ed9d9817b9a2c728f380474a2a8350be472b569","head":{"label":"thehyve:summary-stats","ref":"summary-stats","sha":"9ed9d9817b9a2c728f380474a2a8350be472b569","user":{"login":"thehyve","id":1502440,"avatar_url":"https://avatars.githubusercontent.com/u/1502440?v=3","gravatar_id":"","url":"https://api.github.com/users/thehyve","html_url":"https://github.com/thehyve","followers_url":"https://api.github.com/users/thehyve/followers","following_url":"https://api.github.com/users/thehyve/following{/other_user}","gists_url":"https://api.github.com/users/thehyve/gists{/gist_id}","starred_url":"https://api.github.com/users/thehyve/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thehyve/subscriptions","organizations_url":"https://api.github.com/users/thehyve/orgs","repos_url":"https://api.github.com/users/thehyve/repos","events_url":"https://api.github.com/users/thehyve/events{/privacy}","received_events_url":"https://api.github.com/users/thehyve/received_events","type":"Organization","site_admin":false},"repo":{"id":43434009,"name":"heim-SmartR","full_name":"thehyve/heim-SmartR","owner":{"login":"thehyve","id":1502440,"avatar_url":"https://avatars.githubusercontent.com/u/1502440?v=3","gravatar_id":"","url":"https://api.github.com/users/thehyve","html_url":"https://github.com/thehyve","followers_url":"https://api.github.com/users/thehyve/followers","following_url":"https://api.github.com/users/thehyve/following{/other_user}","gists_url":"https://api.github.com/users/thehyve/gists{/gist_id}","starred_url":"https://api.github.com/users/thehyve/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thehyve/subscriptions","organizations_url":"https://api.github.com/users/thehyve/orgs","repos_url":"https://api.github.com/users/thehyve/repos","events_url":"https://api.github.com/users/thehyve/events{/privacy}","received_events_url":"https://api.github.com/users/thehyve/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/thehyve/heim-SmartR","description":"heim","fork":false,"url":"https://api.github.com/repos/thehyve/heim-SmartR","forks_url":"https://api.github.com/repos/thehyve/heim-SmartR/forks","keys_url":"https://api.github.com/repos/thehyve/heim-SmartR/keys{/key_id}","collaborators_url":"https://api.github.com/repos/thehyve/heim-SmartR/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/thehyve/heim-SmartR/teams","hooks_url":"https://api.github.com/repos/thehyve/heim-SmartR/hooks","issue_events_url":"https://api.github.com/repos/thehyve/heim-SmartR/issues/events{/number}","events_url":"https://api.github.com/repos/thehyve/heim-SmartR/events","assignees_url":"https://api.github.com/repos/thehyve/heim-SmartR/assignees{/user}","branches_url":"https://api.github.com/repos/thehyve/heim-SmartR/branches{/branch}","tags_url":"https://api.github.com/repos/thehyve/heim-SmartR/tags","blobs_url":"https://api.github.com/repos/thehyve/heim-SmartR/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/thehyve/heim-SmartR/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/thehyve/heim-SmartR/git/refs{/sha}","trees_url":"https://api.github.com/repos/thehyve/heim-SmartR/git/trees{/sha}","statuses_url":"https://api.github.com/repos/thehyve/heim-SmartR/statuses/{sha}","languages_url":"https://api.github.com/repos/thehyve/heim-SmartR/languages","stargazers_url":"https://api.github.com/repos/thehyve/heim-SmartR/stargazers","contributors_url":"https://api.github.com/repos/thehyve/heim-SmartR/contributors","subscribers_url":"https://api.github.com/repos/thehyve/heim-SmartR/subscribers","subscription_url":"https://api.github.com/repos/thehyve/heim-SmartR/subscription","commits_url":"https://api.github.com/repos/thehyve/heim-SmartR/commits{/sha}","git_commits_url":"https://api.github.com/repos/thehyve/heim-SmartR/git/commits{/sha}","comments_url":"https://api.github.com/repos/thehyve/heim-SmartR/comments{/number}","issue_comment_url":"https://api.github.com/repos/thehyve/heim-SmartR/issues/comments{/number}","contents_url":"https://api.github.com/repos/thehyve/heim-SmartR/contents/{+path}","compare_url":"https://api.github.com/repos/thehyve/heim-SmartR/compare/{base}...{head}","merges_url":"https://api.github.com/repos/thehyve/heim-SmartR/merges","archive_url":"https://api.github.com/repos/thehyve/heim-SmartR/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/thehyve/heim-SmartR/downloads","issues_url":"https://api.github.com/repos/thehyve/heim-SmartR/issues{/number}","pulls_url":"https://api.github.com/repos/thehyve/heim-SmartR/pulls{/number}","milestones_url":"https://api.github.com/repos/thehyve/heim-SmartR/milestones{/number}","notifications_url":"https://api.github.com/repos/thehyve/heim-SmartR/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/thehyve/heim-SmartR/labels{/name}","releases_url":"https://api.github.com/repos/thehyve/heim-SmartR/releases{/id}","created_at":"2015-09-30T13:19:44Z","updated_at":"2015-10-16T10:25:47Z","pushed_at":"2015-11-19T15:18:35Z","git_url":"git://github.com/thehyve/heim-SmartR.git","ssh_url":"git@github.com:thehyve/heim-SmartR.git","clone_url":"https://github.com/thehyve/heim-SmartR.git","svn_url":"https://github.com/thehyve/heim-SmartR","homepage":"","size":2049,"stargazers_count":0,"watchers_count":0,"language":"Groovy","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":2,"forks":0,"open_issues":2,"watchers":0,"default_branch":"dev"}},"base":{"label":"thehyve:dev","ref":"dev","sha":"2ac7ae899dd9b0a1c59f630f235eb19143aab52a","user":{"login":"thehyve","id":1502440,"avatar_url":"https://avatars.githubusercontent.com/u/1502440?v=3","gravatar_id":"","url":"https://api.github.com/users/thehyve","html_url":"https://github.com/thehyve","followers_url":"https://api.github.com/users/thehyve/followers","following_url":"https://api.github.com/users/thehyve/following{/other_user}","gists_url":"https://api.github.com/users/thehyve/gists{/gist_id}","starred_url":"https://api.github.com/users/thehyve/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thehyve/subscriptions","organizations_url":"https://api.github.com/users/thehyve/orgs","repos_url":"https://api.github.com/users/thehyve/repos","events_url":"https://api.github.com/users/thehyve/events{/privacy}","received_events_url":"https://api.github.com/users/thehyve/received_events","type":"Organization","site_admin":false},"repo":{"id":43434009,"name":"heim-SmartR","full_name":"thehyve/heim-SmartR","owner":{"login":"thehyve","id":1502440,"avatar_url":"https://avatars.githubusercontent.com/u/1502440?v=3","gravatar_id":"","url":"https://api.github.com/users/thehyve","html_url":"https://github.com/thehyve","followers_url":"https://api.github.com/users/thehyve/followers","following_url":"https://api.github.com/users/thehyve/following{/other_user}","gists_url":"https://api.github.com/users/thehyve/gists{/gist_id}","starred_url":"https://api.github.com/users/thehyve/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thehyve/subscriptions","organizations_url":"https://api.github.com/users/thehyve/orgs","repos_url":"https://api.github.com/users/thehyve/repos","events_url":"https://api.github.com/users/thehyve/events{/privacy}","received_events_url":"https://api.github.com/users/thehyve/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/thehyve/heim-SmartR","description":"heim","fork":false,"url":"https://api.github.com/repos/thehyve/heim-SmartR","forks_url":"https://api.github.com/repos/thehyve/heim-SmartR/forks","keys_url":"https://api.github.com/repos/thehyve/heim-SmartR/keys{/key_id}","collaborators_url":"https://api.github.com/repos/thehyve/heim-SmartR/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/thehyve/heim-SmartR/teams","hooks_url":"https://api.github.com/repos/thehyve/heim-SmartR/hooks","issue_events_url":"https://api.github.com/repos/thehyve/heim-SmartR/issues/events{/number}","events_url":"https://api.github.com/repos/thehyve/heim-SmartR/events","assignees_url":"https://api.github.com/repos/thehyve/heim-SmartR/assignees{/user}","branches_url":"https://api.github.com/repos/thehyve/heim-SmartR/branches{/branch}","tags_url":"https://api.github.com/repos/thehyve/heim-SmartR/tags","blobs_url":"https://api.github.com/repos/thehyve/heim-SmartR/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/thehyve/heim-SmartR/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/thehyve/heim-SmartR/git/refs{/sha}","trees_url":"https://api.github.com/repos/thehyve/heim-SmartR/git/trees{/sha}","statuses_url":"https://api.github.com/repos/thehyve/heim-SmartR/statuses/{sha}","languages_url":"https://api.github.com/repos/thehyve/heim-SmartR/languages","stargazers_url":"https://api.github.com/repos/thehyve/heim-SmartR/stargazers","contributors_url":"https://api.github.com/repos/thehyve/heim-SmartR/contributors","subscribers_url":"https://api.github.com/repos/thehyve/heim-SmartR/subscribers","subscription_url":"https://api.github.com/repos/thehyve/heim-SmartR/subscription","commits_url":"https://api.github.com/repos/thehyve/heim-SmartR/commits{/sha}","git_commits_url":"https://api.github.com/repos/thehyve/heim-SmartR/git/commits{/sha}","comments_url":"https://api.github.com/repos/thehyve/heim-SmartR/comments{/number}","issue_comment_url":"https://api.github.com/repos/thehyve/heim-SmartR/issues/comments{/number}","contents_url":"https://api.github.com/repos/thehyve/heim-SmartR/contents/{+path}","compare_url":"https://api.github.com/repos/thehyve/heim-SmartR/compare/{base}...{head}","merges_url":"https://api.github.com/repos/thehyve/heim-SmartR/merges","archive_url":"https://api.github.com/repos/thehyve/heim-SmartR/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/thehyve/heim-SmartR/downloads","issues_url":"https://api.github.com/repos/thehyve/heim-SmartR/issues{/number}","pulls_url":"https://api.github.com/repos/thehyve/heim-SmartR/pulls{/number}","milestones_url":"https://api.github.com/repos/thehyve/heim-SmartR/milestones{/number}","notifications_url":"https://api.github.com/repos/thehyve/heim-SmartR/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/thehyve/heim-SmartR/labels{/name}","releases_url":"https://api.github.com/repos/thehyve/heim-SmartR/releases{/id}","created_at":"2015-09-30T13:19:44Z","updated_at":"2015-10-16T10:25:47Z","pushed_at":"2015-11-19T15:18:35Z","git_url":"git://github.com/thehyve/heim-SmartR.git","ssh_url":"git@github.com:thehyve/heim-SmartR.git","clone_url":"https://github.com/thehyve/heim-SmartR.git","svn_url":"https://github.com/thehyve/heim-SmartR","homepage":"","size":2049,"stargazers_count":0,"watchers_count":0,"language":"Groovy","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":2,"forks":0,"open_issues":2,"watchers":0,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/thehyve/heim-SmartR/pulls/31"},"html":{"href":"https://github.com/thehyve/heim-SmartR/pull/31"},"issue":{"href":"https://api.github.com/repos/thehyve/heim-SmartR/issues/31"},"comments":{"href":"https://api.github.com/repos/thehyve/heim-SmartR/issues/31/comments"},"review_comments":{"href":"https://api.github.com/repos/thehyve/heim-SmartR/pulls/31/comments"},"review_comment":{"href":"https://api.github.com/repos/thehyve/heim-SmartR/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/thehyve/heim-SmartR/pulls/31/commits"},"statuses":{"href":"https://api.github.com/repos/thehyve/heim-SmartR/statuses/9ed9d9817b9a2c728f380474a2a8350be472b569"}}}}