Opencpu 和流星
Opencpu and Meteor
我见过 some examples 将 opencpu 与 angular 一起使用,但没有在 meteor 中使用 opencpu 的示例(其中 angular 可以很容易地实现)。
是否像在 meteor 中包含 ocpu.seturl
和 jquery.min.js
一样简单(就像 here 所做的那样),或者在使用 opencpu 时是否需要在 meteor 中有不同的想法?
例如,there might be some conflicts between angular and meteor.
我知道这是一个分散的问题,但我发现我不是唯一对此感到疑惑的人。
相关:
- https://groups.google.com/forum/#!topic/opencpu/rEi7lMK65GU
- https://www.quora.com/Is-it-possible-to-call-the-R-server-within-a-website-made-with-Meteor-run-some-R-code-then-display-its-output
例如(感谢http://jsfiddle.net/ramnathv/uatjd/15/):
var myApp = angular.module('myApp', ['angular-meteor']); //added 'angular-meteor'
//set CORS to call "stocks" package on public server
ocpu.seturl("//public.opencpu.org/ocpu/library/graphics/R")
myApp.factory('OpenCPU', function($http){
return {
Dist: function(dist){
var url = "http://public.opencpu.org//ocpu/library/stats/R/" + dist +
"/json"
return $http.post(url, {n: 100})
}
}
})
myApp.controller("HistCtrl", function($scope, $http, OpenCPU){
$scope.dist = 'rnorm'
$scope.dists = ['rnorm', 'runif']
$scope.color = 'blue'
$scope.colors = ['blue', 'red', 'darkmagenta']
$scope.breaks = 10
$scope.submit = function(){
var req = $("#plotdiv").rplot("hist", {
x : $scope.data,
col: $scope.color,
breaks: Math.floor($scope.breaks),
main: $scope.main
});
}
$scope.$watchCollection('[main, color, breaks, data]', function(x){
$scope.submit()
})
$scope.$watch('dist', function(newDist){
OpenCPU.Dist(newDist).success(function(result){
$scope.data = result
})
})
})
以上是 "correct" 的起点吗?应该如何在 meteor
中声明依赖关系(即 opencpu,jquery.min.js)? meteor 的新手,所以非常感谢任何建议!
不使用 angular(不确定为什么需要那个),但这是 meteor 中的超级基本设置:
HTML:
<head>
<title>opencpu</title>
<script src="//cdn.opencpu.org/opencpu-0.4.js"></script>
</head>
<body>
<h1>Testing OpenCPU</h1>
{{> hello}}
</body>
<template name="hello">
</template>
JS:
if (Meteor.isClient) {
Template.hello.onRendered(function() {
// ocpu.seturl("//public.opencpu.org/ocpu/library/graphics/R");
// couldn't come up with a good example for this
ocpu.seturl("//public.opencpu.org/ocpu/library/stats/R")
// this gives me a CORS error but the below still seems to work
console.log(ocpu);
var req1 = ocpu.call("rnorm", {n: 100}, function(session1){
var req2 = ocpu.call("var", {x : session1}, function(session2){
session2.getObject(function(data){
alert("Variance equals: " + data);
});
});
});
});
}
我在过去 30 分钟内学到的关于 opencpu 的所有知识 -- 很少!所以我不知道如何克服 CORS 错误。指向图形包时似乎没有发生该错误,但是对于那个我想不出一个很好的例子。
我见过 some examples 将 opencpu 与 angular 一起使用,但没有在 meteor 中使用 opencpu 的示例(其中 angular 可以很容易地实现)。
是否像在 meteor 中包含 ocpu.seturl
和 jquery.min.js
一样简单(就像 here 所做的那样),或者在使用 opencpu 时是否需要在 meteor 中有不同的想法?
例如,there might be some conflicts between angular and meteor.
我知道这是一个分散的问题,但我发现我不是唯一对此感到疑惑的人。
相关:
- https://groups.google.com/forum/#!topic/opencpu/rEi7lMK65GU
- https://www.quora.com/Is-it-possible-to-call-the-R-server-within-a-website-made-with-Meteor-run-some-R-code-then-display-its-output
例如(感谢http://jsfiddle.net/ramnathv/uatjd/15/):
var myApp = angular.module('myApp', ['angular-meteor']); //added 'angular-meteor'
//set CORS to call "stocks" package on public server
ocpu.seturl("//public.opencpu.org/ocpu/library/graphics/R")
myApp.factory('OpenCPU', function($http){
return {
Dist: function(dist){
var url = "http://public.opencpu.org//ocpu/library/stats/R/" + dist +
"/json"
return $http.post(url, {n: 100})
}
}
})
myApp.controller("HistCtrl", function($scope, $http, OpenCPU){
$scope.dist = 'rnorm'
$scope.dists = ['rnorm', 'runif']
$scope.color = 'blue'
$scope.colors = ['blue', 'red', 'darkmagenta']
$scope.breaks = 10
$scope.submit = function(){
var req = $("#plotdiv").rplot("hist", {
x : $scope.data,
col: $scope.color,
breaks: Math.floor($scope.breaks),
main: $scope.main
});
}
$scope.$watchCollection('[main, color, breaks, data]', function(x){
$scope.submit()
})
$scope.$watch('dist', function(newDist){
OpenCPU.Dist(newDist).success(function(result){
$scope.data = result
})
})
})
以上是 "correct" 的起点吗?应该如何在 meteor
中声明依赖关系(即 opencpu,jquery.min.js)? meteor 的新手,所以非常感谢任何建议!
不使用 angular(不确定为什么需要那个),但这是 meteor 中的超级基本设置:
HTML:
<head>
<title>opencpu</title>
<script src="//cdn.opencpu.org/opencpu-0.4.js"></script>
</head>
<body>
<h1>Testing OpenCPU</h1>
{{> hello}}
</body>
<template name="hello">
</template>
JS:
if (Meteor.isClient) {
Template.hello.onRendered(function() {
// ocpu.seturl("//public.opencpu.org/ocpu/library/graphics/R");
// couldn't come up with a good example for this
ocpu.seturl("//public.opencpu.org/ocpu/library/stats/R")
// this gives me a CORS error but the below still seems to work
console.log(ocpu);
var req1 = ocpu.call("rnorm", {n: 100}, function(session1){
var req2 = ocpu.call("var", {x : session1}, function(session2){
session2.getObject(function(data){
alert("Variance equals: " + data);
});
});
});
});
}
我在过去 30 分钟内学到的关于 opencpu 的所有知识 -- 很少!所以我不知道如何克服 CORS 错误。指向图形包时似乎没有发生该错误,但是对于那个我想不出一个很好的例子。