>  기사  >  백엔드 개발  >  PHP에서 RScript 스크립트를 호출하는 방법(코드 포함)

PHP에서 RScript 스크립트를 호출하는 방법(코드 포함)

PHPz
PHPz앞으로
2016-07-29 08:33:353793검색

이 글은 주로 PHP에서 RScript 스크립트를 호출하는 방법을 소개합니다. 관심 있는 친구들이 참고하면 좋을 것 같습니다.

어떤 이유에서인지 PHP에서는 R voice를 호출해야 이미지를 그릴 수 있습니다. Baidu에서 여러 번 검색한 결과 대부분의 현재 솔루션은 다음과 같습니다. exec, system, shell_exec 등과 같은 PHP의 시스템 명령 기능을 사용하여 RScript 스크립트를 호출하는 두 가지 일반적인 명령줄이 있습니다.

첫 번째입니다. :

exec("RScript " . $your_script_dir . "$your_RScript_file " . $args);    // 里面有printf某个变量
// echo ("RScript " . $your_script_dir . "$your_RScript_file " . $args);

두 번째 유형:

 system("R --slave < " . $your_RScript_dir . "$your_RScript_file" . " --args " . $args); // 里面有printf某个变量
// echo ("R --slave < " . $your_RScript_dir . "$your_RScript_file" . " --args " . $args);

다음으로 안심하고 PHP를 실행해 보면 우리가 실행하는 시스템 명령에 의해 반환되는 값이 1, 즉 실패임을 알 수 있습니다. . 그런데 echo 문을 가져와서 cmd 창에서 실행해 보니 결과가 printf 되면서 제가 원하는 이미지도 생성되는 것을 발견했습니다. 왜 이런가요? Baidu에서 많은 시도 끝에 마침내 해결책을 찾았습니다. 이는 참고용이며 더 나은 방법이 있으면 의견란에 게시해 주시면 함께 작업하여 진전을 이룰 수 있습니다.

1. 실패한 호출을 간단히 살펴보세요

PHP에서 RScript 스크립트를 호출하는 방법(코드 포함)PHP에서 호출한 R 스크립트의 내용입니다. 아래는 브라우저에서 호출한 결과입니다.

PHP에서 RScript 스크립트를 호출하는 방법(코드 포함)

cmd에서 echo문을 실행해보겠습니다. 결과는 다음과 같습니다.

PHP에서 RScript 스크립트를 호출하는 방법(코드 포함)생성된 파일은 다음과 같습니다.

PHP에서 RScript 스크립트를 호출하는 방법(코드 포함)

보시다시피 제가 들어가고 싶은 $plotName은 끝이 null 즉, 실행이 성공했거나 cmd에 인쇄된 파일 정보를 가져오지 못한 경우입니다.

2. 솔루션

RServe라는 PHP 플러그인을 제공하여 R 언어를 호출하는 경우 이에 익숙해야 합니다. 이제 PHP 버전이 나왔으니 사용할 수 있습니다. 다운로드 주소: Rserve-php

3. 사용 방법

물론 플러그인에도 몇 가지 간단한 예제가 있으므로 참조하여 이해하실 수 있습니다. 내 솔루션은 다음과 같습니다. ThinkPHP5 프레임워크를 기반으로 구현했습니다.

1. 먼저 프로젝트에 플러그인을 추가해야 합니다. 다음 코드를 추가하세요:

require_once ROOT_PATH . &#39;vendor/rserve/autoload.php&#39;;

2. 필요에 따라 일부 클래스를 사용하세요.

use Sentiweb\Rserve\Connection;            // 连接R服务的类
use Sentiweb\Rserve\Evaluator;             // 简单的理解为:建立连接后返回的处理器
use Sentiweb\Rserve\REXP\Vector;           // 内置的存储容器

3. RScript 스크립트 작성

이전에 작성된 스크립트를 R 언어의 함수로 수정해야 합니다. 형식은 다음과 같습니다.

RScript <- function(arg1, ..., argN) {
    # code... 请无视这种注释方式,R语言没有注释
    return output    # 该函数的返回值
}

나중에 호출하려면 Rserve 플러그인을 사용하겠습니다.

4. PHP 함수 작성

나중에 호출하기 쉽도록 RScript 스크립트를 호출하는 기능을 함수로 통합했습니다. 읽고 유지하십시오.

class Common {
    // $source 表示自己编写的R语言函数文件
    // $file, $cancer:本R函数所需要参数
    function RScript($source, $file, $cancer) {
        $cnx = new Connection(RSERVE_HOST);                    // 与RSERVE_HOST建立连接,一般为自己服务器地址,如果本地,则为localhost
        $eval = new Evaluator($cnx, Evaluator::PARSER_REXP);   // 通过连接,生成处理器,后一个参数决定连接失败时返回错误信息
        $eval->evaluate("source(&#39;$source&#39;)");                  // 类似library,将函数载入R的编程环境中;evaluate计算括号内的R命令
        // 同理,执行R命令,注意括号内是字符串的形式,由于返回的是RServe的Rstring类,为了拿到我想要的信息,通过Vector类的toHTML转为含return信息的标签语言
        $RString = $eval->evaluate("RScript(&#39;$file&#39;, &#39;$cancer&#39;)")->toHTML();    
        preg_match("/$cancer.+.pdf/", $RString, $fileName);    // 提炼信息
        return $fileName[0];                                   // 返回结果
    }
}

5. 성공적인 구현

여기서는 최종 결과를 보여주지 않겠습니다. 필요한 학생은 직접 해보세요. .

4. 실패 이유

빡빡한 프로젝트 일정과 PHP, R 언어에 대한 익숙도가 낮아서 직접 호출한 결과가 왜 나오는지 모르겠습니다. 명령 실행이 실패합니다. 이 사실을 아는 친구들은 댓글로 답글을 달 수 있습니다. 위의 내용은 PHP에서 R 언어 스크립트를 호출하는 방법에 대한 모든 솔루션입니다. 읽어주셔서 감사합니다.

더 많은 관련 비디오 튜토리얼을 보려면 초보부터 마스터까지 PHP 프로그래밍에 대한 전체 비디오 튜토리얼 세트

를 방문하세요.
성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제