需要帮助OpenCPU和igraph输出格式

时间:2017-05-13 05:00:36

标签: javascript angularjs r opencpu

我的数据调整数组是

var g = [[10, 2], [15, 0], [18, 3], [19, 6], [20, 8.5], [25, 10], [30, 9], [35, 8], [40, 5], [45, 6], [50, 2.5]]

我的OpenCPU代码是

            ocpu.call("centralization.closeness", {graph: g}, function(res){
            // console.log(ocpu.seturl(res.output[0]));
            $http.get("//public.opencpu.org/"+res.output[0]+"/json").success(function(data) {
                console.log(data);
            });
        });

这是错误

  

OpenCPU错误HTTP 400不是图形对象

     

在电话中:centralization.closeness(graph = g)

2 个答案:

答案 0 :(得分:1)

centralization.closeness采用图形对象而不是数组

<强>建议

  • 将数组转换为邻接矩阵
  • 使用graph_from_adjacency_matrix将矩阵转换为图表。
  • 将结果图传递给centralization.closeness

编辑解决方案:https://jsfiddle.net/bowofola/pskezhLq/2/

&#13;
&#13;
var graph = [
  [0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1],
  [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1],
  [1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1],
  [0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0],
  [1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0],
  [1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1],
  [0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1],
  [0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1],
  [0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0],
  [1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1],
  [1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1],
  [1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1],
  [1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0],
  [1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0]
];

//set CORS to call igraph package
ocpu.seturl("https://public.opencpu.org/ocpu/library/igraph/R");

var graphSession;

$('#output').text(graph.toString());

$('#adjMatrix').click(function() {
  ocpu.call("graph_from_adjacency_matrix", {
    adjmatrix: graph,
    mode: 'directed',
    weighted: true
  }, function(session) {
    graphSession = session;
    //retrieve session console (async)
    graphSession.getConsole(function(outtxt) {
      $("#output").text(outtxt);
      $("#centralize").prop('disabled', false);
    });
  }).fail(function() {
    alert("Error: " + req.responseText);
  });
});

$('#centralize').click(function() {
  var centralizeReq = ocpu.call("centralization.closeness", {
    graph: graphSession,
    mode: "all",
    normalized: true
  }, function(centralizeSession) {
    centralizeSession.getConsole(function(outtxt) {
      $("#output").text(outtxt);
    });
  }).fail(function() {
    alert("Error: " + req.responseText);
  });

});
&#13;
<script src="https://code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="https://cdn.opencpu.org/opencpu-0.4.js"></script>

<div>
  <textarea name="" id="output" cols="60" rows="10"></textarea>
  <br />
  <button id="adjMatrix">Graph From Adj</button>
  <button id="centralize" disabled>Centralize</button>
</div>
&#13;
&#13;
&#13;

有关使用open cpu的更多示例,请点击此处:http://jsfiddle.net/user/opencpu/fiddles/

答案 1 :(得分:0)

您期望OpenCPU运行到底是什么?目前您正在运行此代码:

library(igraph)
g <- jsonlite::fromJSON('[[10, 2], [15, 0], [18, 3], [19, 6], [20, 8.5], [25, 10], [30, 9], [35, 8], [40, 5], [45, 6], [50, 2.5]]')
igraph::centralization.closeness(g)

在R中运行时,您将收到相同的错误。您需要编写一个包装函数,将矩阵转换为一种类型,然后将其传递给centralization.closeness