{"action":"created","comment":{"url":"https://api.github.com/repos/vertica/DistributedR/pulls/comments/40776320","id":40776320,"diff_hunk":"@@ -0,0 +1,303 @@\n+#####################################################################################\n+# Copyright [2013] Hewlett-Packard Development Company, L.P.                        # \n+#                                                                                   #\n+# This program is free software; you can redistribute it and/or                     #\n+# modify it under the terms of the GNU General Public License                       #\n+# as published by the Free Software Foundation; either version 2                    #\n+# of the License, or (at your option) any later version.                            #\n+#                                                                                   #\n+# This program is distributed in the hope that it will be useful,                   #\n+# but WITHOUT ANY WARRANTY; without even the implied warranty of                    #\n+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the                      #\n+# GNU General Public License for more details.                                      #\n+#                                                                                   #\n+# You should have received a copy of the GNU General Public License                 #\n+# along with this program; if not, write to the Free Software                       #\n+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.    #\n+#####################################################################################\n+\n+\n+hpdsample <- function(data1, data2, nSamplePartitions, samplingRatio, trace = FALSE) {\n+  # Samples data from data1 (and when present, data2, maintaining the same\n+  # order of samples between them) into a new darray/dframe with nSamplePartitions\n+  # partitions, each of which contains approximately samplingRatio * nrow(data1)\n+  # elements. \n+  #\n+  # Args:\n+  #   data1:            A darray/dframe to sample\n+  #   data2 (optional): A darray/dframe to sample along with data1. Must have\n+  #                     the same number of rows and partitions as data1. Each\n+  #                     row of data2 is assumed to correspond with the same row\n+  #                     of data1, and this correspondence will be maintained\n+  #                     when sampling.\n+  #   nSamplePartitions:       The number of output partitions for the sample data\n+  #   samplingRatio:        The percentage of data from data1/data2 to be sampled\n+  #                     in each output partition. E.g. if nrow(data1) = 100,\n+  #                     and samplingRatio is 0.1, each output partition will\n+  #                     contain approximately 100 * 0.1 = 10 rows.\n+  #   trace:            A boolean that states whether or not to print the\n+  #                     progress of the distributed foreach calls\n+  # Returns:\n+  #   If only data1 is present, an output dobject of the same type as data1\n+  #   with nSamplePartitions partitions, each of which contains samplingRatio *\n+  #   nrow(data1) elements sampled randomly from data1. If data2 is present, a\n+  #   list with elements sdata1 (containing the data sampled from data1) and\n+  #   sdata2 (containing the data sampled from data2)\n+\n+  if (!is.numeric(nSamplePartitions) || length(nSamplePartitions) != 1 || nSamplePartitions <= 0 ||\n+      nSamplePartitions %% 1 != 0) \n+    stop(\"'nSamplePartitions' must be a positive integer\")\n+\n+  if (!is.numeric(samplingRatio) || length(samplingRatio) != 1 || samplingRatio <= 0) \n+    stop(\"'samplingRatio' must be a positive number\")\n+  \n+  if (!(is.darray(data1) || is.dframe(data1))) \n+    stop(\"'data1' must be a darray or dframe\")\n+\n+  if (missing(data2)) .hpdsamplesingle(data1, nSamplePartitions, samplingRatio,  trace)\n+  else                .hpdsampledual(data1, data2, nSamplePartitions, samplingRatio, trace)\n+}\n+\n+.hpdsamplesingle <- function(data, nSamplePartitions, samplingRatio, trace) {\n+  # Function used to perform sampling on a single darray/dframe\n+\n+  ndcol     <- ncol(data)\n+  # Contains the amount of data to be sampled from each data partition into the\n+  # output partitions\n+  psizes    <- ceiling(partitionsize(data)[,1] * samplingRatio)\n+  finalnspp <- sum(psizes) # Number of samples per partition\n+  ddim      <- c(finalnspp * nSamplePartitions, ndcol)\n+  dblocks   <- c(finalnspp, ndcol)\n+  # Contains sample data to be returned\n+  sdata     <- if      (is.darray(data)) darray(dim = ddim, blocks = dblocks)\n+               else if (is.dframe(data)) dframe(dim = ddim, blocks = dblocks)\n+\n+  # We need metadata about which of the columns are factors so that we can\n+  # keep track of factors locally within each partition.  If data is a dframe,\n+  # dLevels is an array of the global levels for each column of data that is a\n+  # factor. Otherwise, it is NULL and isn't used later\n+  dLevels <- if(is.dframe(data)) .getGlobalLevels(data)\n+\n+  for (k in 1:npartitions(data)) { # For each partition dk of the input data\n+    # Iterate over the output partitions si in parallel and copy some portion of\n+    # the data from partition dk to sample partition si. This copied data will\n+    # be appended to the data copied from previous partitions\n+    foreach(i, 1:nSamplePartitions, function(si = splits(sdata, i),\n+                                      dk = splits(data, k),\n+                                      psizes = psizes,\n+                                      dLevels = dLevels,\n+                                      k = k, \n+                                      .coerceFactorsToGlobalLevels =\n+                                        .coerceFactorsToGlobalLevels, \n+                                      .copyClassStructure = .copyClassStructure) {\n+      # Create a random index to choose which data items to copy from dk to si\n+      idx <- sample(1:nrow(dk), psizes[k], replace = TRUE)\n+\n+      # Based on the value of k we decide where to copy the data in splits si\n+      # since we don't want to overwrite data that was previously copied.\n+      # Effectively appends this data to previous data\n+      startRow <- if (k == 1) 1 else sum(psizes[1:(k - 1)]) + 1 \n+      endRow   <- startRow + length(idx) - 1\n+\n+      if (is.data.frame(dk)) {\n+        # If dLevels is non-null, need to convert its factor columns to use the\n+        # same levels map as the global levels in case the levels aren't\n+        # consistent from partition to partition of 'data'\n+        if (!is.null(dLevels)) \n+          dk <- .coerceFactorsToGlobalLevels(dk, dLevels)\n+\n+        # First iteration, no data has been copied yet. Ensure all the types of\n+        # the sample data are the same as the originals\n+        if (k == 1) \n+          si <- .copyClassStructure(dk, si, dLevels)\n+      }\n+\n+      # Copy data items into sampled data\n+      si[startRow:endRow,] <- dk[idx,,drop = F]\n+\n+      update(si)\n+    }, progress = trace, scheduler = 1)\n+  }\n+  colnames(sdata) <- colnames(data)\n+  sdata \n+}\n+\n+.hpdsampledual <- function(data1, data2, nSamplePartitions, samplingRatio, trace) {\n+  # Function to sample two darrays/dframes in conjunction\n+  \n+  if (!(is.darray(data1) || is.dframe(data1))) \n+    stop(\"'data1' must be a darray or dframe\")\n+\n+  if (!(is.darray(data2) || is.dframe(data2))) \n+    stop(\"'data2' must be a darray or dframe\")\n+\n+  if (nrow(data1) != nrow(data2)) \n+    stop(\"'data1' and 'data2' must be the same length\")\n+\n+  if (npartitions(data1) != npartitions(data2)) \n+    stop(\"'data1' and 'data2' must have the same number of partitions\")\n+\n+  ndcol1    <- ncol(data1)\n+  ndcol2    <- ncol(data2)\n+  # Contains the amount of data to be sampled from each data partition into the\n+  # output partitions\n+  psizes    <- ceiling(partitionsize(data1)[,1] * samplingRatio)\n+  finalnspp <- sum(psizes) # Number of samples per partition \n+\n+  d1dim     <- c(finalnspp * nSamplePartitions, ndcol1)\n+  d1blocks  <- c(finalnspp, ndcol1)\n+  d2dim     <- c(finalnspp * nSamplePartitions, ndcol2)\n+  d2blocks  <- c(finalnspp, ndcol2)\n+  # dobject to contain the sampled data from data1\n+  sdata1 <- if (is.darray(data1))      darray(dim = d1dim, blocks = d1blocks) \n+            else if (is.dframe(data1)) dframe(dim = d1dim, blocks = d1blocks) \n+  # dobject to contain the sampled data from data2 \n+  sdata2 <- if (is.darray(data2))      darray(dim = d2dim, blocks = d2blocks)\n+            else if (is.dframe(data2)) dframe(dim = d2dim, blocks = d2blocks)\n+\n+  # We need metadata about which of the columns are factors so that we can\n+  # keep track of factors locally within each partition: \n+  d1Levels <- if(is.dframe(data1)) .getGlobalLevels(data1)\n+  d2Levels <- if(is.dframe(data2)) .getGlobalLevels(data2)\n+\n+  for (k in 1:npartitions(data1)) { # For each partition dk of the input data\n+    # Iterate over the output partitions si in parallel and copy some portion of\n+    # the data from partition dk to sample partition si. This copied data will\n+    # be appended to the data copied from previous partitions\n+    foreach(i, 1:nSamplePartitions, function(si1 = splits(sdata1, i),\n+                                      si2 = splits(sdata2, i),\n+                                      dk1 = splits(data1, k),\n+                                      dk2 = splits(data2, k),\n+                                      psizes = psizes,\n+                                      k = k, \n+                                      d1Levels = d1Levels,\n+                                      d2Levels = d2Levels,\n+                                      .coerceFactorsToGlobalLevels =\n+                                        .coerceFactorsToGlobalLevels,\n+                                      .copyClassStructure = .copyClassStructure) {\n+      if (nrow(dk1) != nrow(dk2)) \n+        stop(\"nrow mismatch between data1 split and data2 split in foreach\")\n+\n+      # Create a random index to choose which data items to copy from dk to si\n+      idx <- sample(1:nrow(dk1), psizes[k], replace = TRUE)\n+\n+      # Based on the value of k we decide where to copy the data in splits si1\n+      # and si2, since we don't want to overwrite data that was previously\n+      # copied. Effectively appends this to the previous sampled data\n+      startRow <- if (k == 1) 1 else sum(psizes[1:(k - 1)]) + 1 \n+      endRow   <- startRow + length(idx) - 1\n+\n+      # If dLevels1/2 are non-null, need to convert its factor columns to use the\n+      # same levels map as the global levels in case the levels aren't\n+      # consistent from partition to partition of 'data'\n+      if (is.data.frame(dk1)) {\n+        if (!is.null(d1Levels))\n+          dk1 <- .coerceFactorsToGlobalLevels(dk1, d1Levels)\n+\n+        # First iteration, no data has been copied yet. Ensure all the types\n+        # of the sample data are the same as the originals\n+        if (k == 1)  \n+          si1 <- .copyClassStructure(dk1, si1, d1Levels)\n+      }\n+\n+      if (is.data.frame(dk2)) {\n+        if (!is.null(d2Levels))\n+          dk2 <- .coerceFactorsToGlobalLevels(dk2, d2Levels)\n+\n+        # First iteration, no data has been copied yet. Ensure all the types of\n+        # the sample data are the same as the originals\n+        if (k == 1)            \n+          si2 <- .copyClassStructure(dk2, si2, d2Levels)\n+      }\n+\n+      # Copy data items into sampled data\n+      si1[startRow:endRow,] <- dk1[idx,,drop = F]\n+      si2[startRow:endRow,] <- dk2[idx,,drop = F]\n+\n+      update(si1)\n+      update(si2)\n+    }, progress = trace, scheduler = 1)\n+  }\n+\n+  # Ensure output data has same column names as corresponding input data\n+  colnames(sdata1) <- colnames(data1)\n+  colnames(sdata2) <- colnames(data2)\n+  list(sdata1 = sdata1, sdata2 = sdata2)\n+}\n+\n+.getGlobalLevels <- function(data) {\n+  # Finds the columns of data that are factors and returns the global levels of\n+  # each column\n+  # \n+  # Args:\n+  #   data: A dframe object\n+  # \n+  # Returns: \n+  #   An object returned by levels.dframe  \n+\n+  dfactorCols <- darray(npartition = 1)\n+  # Find out which columns of data are factors by looking at the first\n+  # partition\n+  foreach(i, 1:1, function(di = splits(data, i),\n+                           fs = splits(dfactorCols, i)) {\n+    fs <- as.matrix(which(sapply(di, is.factor)))\n+    update(fs)\n+  }, progress = F)\n+\n+  factorCols <- as.vector(getpartition(dfactorCols))\n+  # Finds the global levels of these columns (if there are any)\n+  dLevels <- if (length(factorCols) > 0) {\n+    levels.dframe(data, colID = factorCols)\n+  } else NULL\n+  return (dLevels)\n+}\n+\n+.coerceFactorsToGlobalLevels <- function(df, dLevels) {\n+  # Converts the columns of df corresponding to factors into new factors using\n+  # the levels specified in dLevels\n+  #\n+  # Args:\n+  #   df: A data frame\n+  #   dLevels: An object returned by levels.dframe containing the global\n+  #            levels for a dframe\n+  # Returns:\n+  #   The modified df\n+     \n+  for (j in seq_along(dLevels$columns)) {\n+    c <- dLevels$columns[j]\n+    df[,c] <- factor(df[,c], levels = dLevels$Levels[[j]])\n+  }\n+  return (df)\n+}\n+\n+.copyClassStructure <- function(dk, si, dLevels) {\n+  # Coerces the columns of si to have the same class types as dk\n+  #\n+  # Args:\n+  #   df: A data frame","path":"algorithms/HPdutility/R/hpdsample.R","position":277,"original_position":277,"commit_id":"a95d408043c8404777b81be67dd9987fb58c4a41","original_commit_id":"a95d408043c8404777b81be67dd9987fb58c4a41","user":{"login":"afard","id":6831558,"avatar_url":"https://avatars.githubusercontent.com/u/6831558?v=3","gravatar_id":"","url":"https://api.github.com/users/afard","html_url":"https://github.com/afard","followers_url":"https://api.github.com/users/afard/followers","following_url":"https://api.github.com/users/afard/following{/other_user}","gists_url":"https://api.github.com/users/afard/gists{/gist_id}","starred_url":"https://api.github.com/users/afard/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/afard/subscriptions","organizations_url":"https://api.github.com/users/afard/orgs","repos_url":"https://api.github.com/users/afard/repos","events_url":"https://api.github.com/users/afard/events{/privacy}","received_events_url":"https://api.github.com/users/afard/received_events","type":"User","site_admin":false},"body":"You mean dk.","created_at":"2015-09-30T09:50:33Z","updated_at":"2015-09-30T09:50:33Z","html_url":"https://github.com/vertica/DistributedR/pull/57#discussion_r40776320","pull_request_url":"https://api.github.com/repos/vertica/DistributedR/pulls/57","_links":{"self":{"href":"https://api.github.com/repos/vertica/DistributedR/pulls/comments/40776320"},"html":{"href":"https://github.com/vertica/DistributedR/pull/57#discussion_r40776320"},"pull_request":{"href":"https://api.github.com/repos/vertica/DistributedR/pulls/57"}}},"pull_request":{"url":"https://api.github.com/repos/vertica/DistributedR/pulls/57","id":46190493,"html_url":"https://github.com/vertica/DistributedR/pull/57","diff_url":"https://github.com/vertica/DistributedR/pull/57.diff","patch_url":"https://github.com/vertica/DistributedR/pull/57.patch","issue_url":"https://api.github.com/repos/vertica/DistributedR/issues/57","number":57,"state":"open","locked":false,"title":"Hpdsample","user":{"login":"saltzm","id":3291217,"avatar_url":"https://avatars.githubusercontent.com/u/3291217?v=3","gravatar_id":"","url":"https://api.github.com/users/saltzm","html_url":"https://github.com/saltzm","followers_url":"https://api.github.com/users/saltzm/followers","following_url":"https://api.github.com/users/saltzm/following{/other_user}","gists_url":"https://api.github.com/users/saltzm/gists{/gist_id}","starred_url":"https://api.github.com/users/saltzm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/saltzm/subscriptions","organizations_url":"https://api.github.com/users/saltzm/orgs","repos_url":"https://api.github.com/users/saltzm/repos","events_url":"https://api.github.com/users/saltzm/events{/privacy}","received_events_url":"https://api.github.com/users/saltzm/received_events","type":"User","site_admin":false},"body":"@WinstonGitVertica @afard ","created_at":"2015-09-28T18:25:48Z","updated_at":"2015-09-30T09:50:33Z","closed_at":null,"merged_at":null,"merge_commit_sha":"5e170404e600ee9f541131d5c1cbddbb450f4cc8","assignee":{"login":"afard","id":6831558,"avatar_url":"https://avatars.githubusercontent.com/u/6831558?v=3","gravatar_id":"","url":"https://api.github.com/users/afard","html_url":"https://github.com/afard","followers_url":"https://api.github.com/users/afard/followers","following_url":"https://api.github.com/users/afard/following{/other_user}","gists_url":"https://api.github.com/users/afard/gists{/gist_id}","starred_url":"https://api.github.com/users/afard/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/afard/subscriptions","organizations_url":"https://api.github.com/users/afard/orgs","repos_url":"https://api.github.com/users/afard/repos","events_url":"https://api.github.com/users/afard/events{/privacy}","received_events_url":"https://api.github.com/users/afard/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/vertica/DistributedR/pulls/57/commits","review_comments_url":"https://api.github.com/repos/vertica/DistributedR/pulls/57/comments","review_comment_url":"https://api.github.com/repos/vertica/DistributedR/pulls/comments{/number}","comments_url":"https://api.github.com/repos/vertica/DistributedR/issues/57/comments","statuses_url":"https://api.github.com/repos/vertica/DistributedR/statuses/a95d408043c8404777b81be67dd9987fb58c4a41","head":{"label":"vertica:hpdsample","ref":"hpdsample","sha":"a95d408043c8404777b81be67dd9987fb58c4a41","user":{"login":"vertica","id":10060,"avatar_url":"https://avatars.githubusercontent.com/u/10060?v=3","gravatar_id":"","url":"https://api.github.com/users/vertica","html_url":"https://github.com/vertica","followers_url":"https://api.github.com/users/vertica/followers","following_url":"https://api.github.com/users/vertica/following{/other_user}","gists_url":"https://api.github.com/users/vertica/gists{/gist_id}","starred_url":"https://api.github.com/users/vertica/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vertica/subscriptions","organizations_url":"https://api.github.com/users/vertica/orgs","repos_url":"https://api.github.com/users/vertica/repos","events_url":"https://api.github.com/users/vertica/events{/privacy}","received_events_url":"https://api.github.com/users/vertica/received_events","type":"Organization","site_admin":false},"repo":{"id":22511128,"name":"DistributedR","full_name":"vertica/DistributedR","owner":{"login":"vertica","id":10060,"avatar_url":"https://avatars.githubusercontent.com/u/10060?v=3","gravatar_id":"","url":"https://api.github.com/users/vertica","html_url":"https://github.com/vertica","followers_url":"https://api.github.com/users/vertica/followers","following_url":"https://api.github.com/users/vertica/following{/other_user}","gists_url":"https://api.github.com/users/vertica/gists{/gist_id}","starred_url":"https://api.github.com/users/vertica/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vertica/subscriptions","organizations_url":"https://api.github.com/users/vertica/orgs","repos_url":"https://api.github.com/users/vertica/repos","events_url":"https://api.github.com/users/vertica/events{/privacy}","received_events_url":"https://api.github.com/users/vertica/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/vertica/DistributedR","description":"","fork":false,"url":"https://api.github.com/repos/vertica/DistributedR","forks_url":"https://api.github.com/repos/vertica/DistributedR/forks","keys_url":"https://api.github.com/repos/vertica/DistributedR/keys{/key_id}","collaborators_url":"https://api.github.com/repos/vertica/DistributedR/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/vertica/DistributedR/teams","hooks_url":"https://api.github.com/repos/vertica/DistributedR/hooks","issue_events_url":"https://api.github.com/repos/vertica/DistributedR/issues/events{/number}","events_url":"https://api.github.com/repos/vertica/DistributedR/events","assignees_url":"https://api.github.com/repos/vertica/DistributedR/assignees{/user}","branches_url":"https://api.github.com/repos/vertica/DistributedR/branches{/branch}","tags_url":"https://api.github.com/repos/vertica/DistributedR/tags","blobs_url":"https://api.github.com/repos/vertica/DistributedR/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/vertica/DistributedR/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/vertica/DistributedR/git/refs{/sha}","trees_url":"https://api.github.com/repos/vertica/DistributedR/git/trees{/sha}","statuses_url":"https://api.github.com/repos/vertica/DistributedR/statuses/{sha}","languages_url":"https://api.github.com/repos/vertica/DistributedR/languages","stargazers_url":"https://api.github.com/repos/vertica/DistributedR/stargazers","contributors_url":"https://api.github.com/repos/vertica/DistributedR/contributors","subscribers_url":"https://api.github.com/repos/vertica/DistributedR/subscribers","subscription_url":"https://api.github.com/repos/vertica/DistributedR/subscription","commits_url":"https://api.github.com/repos/vertica/DistributedR/commits{/sha}","git_commits_url":"https://api.github.com/repos/vertica/DistributedR/git/commits{/sha}","comments_url":"https://api.github.com/repos/vertica/DistributedR/comments{/number}","issue_comment_url":"https://api.github.com/repos/vertica/DistributedR/issues/comments{/number}","contents_url":"https://api.github.com/repos/vertica/DistributedR/contents/{+path}","compare_url":"https://api.github.com/repos/vertica/DistributedR/compare/{base}...{head}","merges_url":"https://api.github.com/repos/vertica/DistributedR/merges","archive_url":"https://api.github.com/repos/vertica/DistributedR/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/vertica/DistributedR/downloads","issues_url":"https://api.github.com/repos/vertica/DistributedR/issues{/number}","pulls_url":"https://api.github.com/repos/vertica/DistributedR/pulls{/number}","milestones_url":"https://api.github.com/repos/vertica/DistributedR/milestones{/number}","notifications_url":"https://api.github.com/repos/vertica/DistributedR/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/vertica/DistributedR/labels{/name}","releases_url":"https://api.github.com/repos/vertica/DistributedR/releases{/id}","created_at":"2014-08-01T13:36:49Z","updated_at":"2015-09-26T20:05:04Z","pushed_at":"2015-09-30T02:11:38Z","git_url":"git://github.com/vertica/DistributedR.git","ssh_url":"git@github.com:vertica/DistributedR.git","clone_url":"https://github.com/vertica/DistributedR.git","svn_url":"https://github.com/vertica/DistributedR","homepage":null,"size":102837,"stargazers_count":93,"watchers_count":93,"language":"R","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":33,"mirror_url":null,"open_issues_count":11,"forks":33,"open_issues":11,"watchers":93,"default_branch":"master"}},"base":{"label":"vertica:master","ref":"master","sha":"f18a0bc6680e7bbce5415e77ea92c7966ecc7278","user":{"login":"vertica","id":10060,"avatar_url":"https://avatars.githubusercontent.com/u/10060?v=3","gravatar_id":"","url":"https://api.github.com/users/vertica","html_url":"https://github.com/vertica","followers_url":"https://api.github.com/users/vertica/followers","following_url":"https://api.github.com/users/vertica/following{/other_user}","gists_url":"https://api.github.com/users/vertica/gists{/gist_id}","starred_url":"https://api.github.com/users/vertica/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vertica/subscriptions","organizations_url":"https://api.github.com/users/vertica/orgs","repos_url":"https://api.github.com/users/vertica/repos","events_url":"https://api.github.com/users/vertica/events{/privacy}","received_events_url":"https://api.github.com/users/vertica/received_events","type":"Organization","site_admin":false},"repo":{"id":22511128,"name":"DistributedR","full_name":"vertica/DistributedR","owner":{"login":"vertica","id":10060,"avatar_url":"https://avatars.githubusercontent.com/u/10060?v=3","gravatar_id":"","url":"https://api.github.com/users/vertica","html_url":"https://github.com/vertica","followers_url":"https://api.github.com/users/vertica/followers","following_url":"https://api.github.com/users/vertica/following{/other_user}","gists_url":"https://api.github.com/users/vertica/gists{/gist_id}","starred_url":"https://api.github.com/users/vertica/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vertica/subscriptions","organizations_url":"https://api.github.com/users/vertica/orgs","repos_url":"https://api.github.com/users/vertica/repos","events_url":"https://api.github.com/users/vertica/events{/privacy}","received_events_url":"https://api.github.com/users/vertica/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/vertica/DistributedR","description":"","fork":false,"url":"https://api.github.com/repos/vertica/DistributedR","forks_url":"https://api.github.com/repos/vertica/DistributedR/forks","keys_url":"https://api.github.com/repos/vertica/DistributedR/keys{/key_id}","collaborators_url":"https://api.github.com/repos/vertica/DistributedR/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/vertica/DistributedR/teams","hooks_url":"https://api.github.com/repos/vertica/DistributedR/hooks","issue_events_url":"https://api.github.com/repos/vertica/DistributedR/issues/events{/number}","events_url":"https://api.github.com/repos/vertica/DistributedR/events","assignees_url":"https://api.github.com/repos/vertica/DistributedR/assignees{/user}","branches_url":"https://api.github.com/repos/vertica/DistributedR/branches{/branch}","tags_url":"https://api.github.com/repos/vertica/DistributedR/tags","blobs_url":"https://api.github.com/repos/vertica/DistributedR/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/vertica/DistributedR/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/vertica/DistributedR/git/refs{/sha}","trees_url":"https://api.github.com/repos/vertica/DistributedR/git/trees{/sha}","statuses_url":"https://api.github.com/repos/vertica/DistributedR/statuses/{sha}","languages_url":"https://api.github.com/repos/vertica/DistributedR/languages","stargazers_url":"https://api.github.com/repos/vertica/DistributedR/stargazers","contributors_url":"https://api.github.com/repos/vertica/DistributedR/contributors","subscribers_url":"https://api.github.com/repos/vertica/DistributedR/subscribers","subscription_url":"https://api.github.com/repos/vertica/DistributedR/subscription","commits_url":"https://api.github.com/repos/vertica/DistributedR/commits{/sha}","git_commits_url":"https://api.github.com/repos/vertica/DistributedR/git/commits{/sha}","comments_url":"https://api.github.com/repos/vertica/DistributedR/comments{/number}","issue_comment_url":"https://api.github.com/repos/vertica/DistributedR/issues/comments{/number}","contents_url":"https://api.github.com/repos/vertica/DistributedR/contents/{+path}","compare_url":"https://api.github.com/repos/vertica/DistributedR/compare/{base}...{head}","merges_url":"https://api.github.com/repos/vertica/DistributedR/merges","archive_url":"https://api.github.com/repos/vertica/DistributedR/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/vertica/DistributedR/downloads","issues_url":"https://api.github.com/repos/vertica/DistributedR/issues{/number}","pulls_url":"https://api.github.com/repos/vertica/DistributedR/pulls{/number}","milestones_url":"https://api.github.com/repos/vertica/DistributedR/milestones{/number}","notifications_url":"https://api.github.com/repos/vertica/DistributedR/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/vertica/DistributedR/labels{/name}","releases_url":"https://api.github.com/repos/vertica/DistributedR/releases{/id}","created_at":"2014-08-01T13:36:49Z","updated_at":"2015-09-26T20:05:04Z","pushed_at":"2015-09-30T02:11:38Z","git_url":"git://github.com/vertica/DistributedR.git","ssh_url":"git@github.com:vertica/DistributedR.git","clone_url":"https://github.com/vertica/DistributedR.git","svn_url":"https://github.com/vertica/DistributedR","homepage":null,"size":102837,"stargazers_count":93,"watchers_count":93,"language":"R","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":33,"mirror_url":null,"open_issues_count":11,"forks":33,"open_issues":11,"watchers":93,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/vertica/DistributedR/pulls/57"},"html":{"href":"https://github.com/vertica/DistributedR/pull/57"},"issue":{"href":"https://api.github.com/repos/vertica/DistributedR/issues/57"},"comments":{"href":"https://api.github.com/repos/vertica/DistributedR/issues/57/comments"},"review_comments":{"href":"https://api.github.com/repos/vertica/DistributedR/pulls/57/comments"},"review_comment":{"href":"https://api.github.com/repos/vertica/DistributedR/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/vertica/DistributedR/pulls/57/commits"},"statuses":{"href":"https://api.github.com/repos/vertica/DistributedR/statuses/a95d408043c8404777b81be67dd9987fb58c4a41"}}}}