“ source()”未执行

时间:2018-07-14 14:29:15

标签: c# r visual-studio r.net

我正在尝试使用R.NET,C#和Visual Studio为某些R脚本编写可视界面。在RStudio上执行R脚本时,它们可以正常工作。这是引起问题的代码:

#include "stdafx.h"
#include "Wave.h"

Wave::~Wave()
{
}

void Wave::setEnemyCount(int count) {
    nemyCount = count;
}

bool Wave::createWave() {
    for (int i = 0; i < enemyCount; i++) {
        enemyArray.push_back(Enemy());
    }

    for (int i = 0; i < enemyArray.size(); i++) {
        int randomPositionX = rand() % 150 + 10;
        int randomPositionY = rand() % 50 + 10;

        if (!enemyArray.at(i).init(randomPositionX, randomPositionY)) {
            std::cout << "Create wave(init enemies) - failed\n";
            return false;
        }
    }

    return true;
}

void Wave::drawWave(Window* window) {
    window->setCursor({ 0, 2 });
    window->setColor(Window::Color::RED);
    std::cout << "Enemies: " << enemyArray.size();
    window->setColor(Window::Color::WHITE);

    for (int i = 0; i < enemyArray.size(); i++) {
        enemyArray.at(i).draw(window);
        //std::cout << i;
    }
}

void Wave::update(Bullet* bullet, Player* player) {

    for (int i = 0; i < enemyArray.size(); i++) {
        if (player->checkShoot()) {
            if ((bullet->getPositionX() >= enemyArray.at(i).getPositionX() && bullet->getPositionX() <= enemyArray.at(i).getPositionX() + 5)) {
                if ((bullet->getPositionY() >= enemyArray.at(i).getPositionY() && bullet->getPositionY() <= enemyArray.at(i).getPositionY() + 5)) {
                    player->addScore(10);
                    enemyArray.erase(enemyArray.begin() + i);
                }
            }
        }
    }

    if (enemyArray.size() <= 0) {
        std::cout << "WAVE COMPLETE";
        Sleep(2000);
        enemyCount += 5;
        createWave();
    }
}

int Wave::getEnemyCount() const {
    return enemyCount;
}

某些代码可能是不必要的,我完全不了解R.NET的工作原理,并且文档也很少。该程序不会停止运行,并且我也没有收到任何异常消息,但MessageBox永远不会出现。当我逐步执行代码时,我看到该代码仅从开头到StartupParameter rinit; private void Form1_Load(object sender, EventArgs e) { rinit = new StartupParameter(); rinit.Quiet = true; rinit.RHome = "C:/Program Files/R/R-3.4.0"; rinit.Interactive = true; REngine engine= REngine.GetInstance(); REngine.SetEnvironmentVariables(@"C:\Program Files\R\R-3.4.0\bin\i386", @"C:\Program Files\R\R-3.4.0"); engine.Evaluate("source('../../rsc/Rscripts/CargarPaquetes.r')"); engine.Evaluate("source('../../rsc/Rscripts/IntroducirDatos.r')"); engine.Evaluate("source('../../rsc/Rscripts/UnirTablas.r')"); engine.Evaluate("PorcentajeEnfermedades<- prop.table(table(TablaTotal$Enfermedad))*100"); var Porcentajes = engine.Evaluate("cbind(Frecuencia=table(TablaEntrenamiento$Enfermedad),Porcentaje=PorcentajeEnfermedades)").AsCharacter().ToArray(); MessageBox.Show(Convert.ToString(Porcentajes[0])); engine.Dispose(); } 执行 (包括)。其余各行从不执行,我也不知道为什么。

顺便说一句,如果有人可以向我推荐R.NET的任何文档站点,我将非常感激。

----编辑----

我创建了一个按钮,并将所有这些代码移至click事件,现在程序停止并显示以下错误:

engine.Evaluate(@"source('../../rsc/Rscripts/CargarPaquetes.r')");

脚本“ CargarPaquetes.r”基本上加载一组软件包。我从R 3.5迁移到R 3.4,因为R.NET在较新的版本中出现了一些问题...现在我必须处理一些错误的已安装软件包。

尽管已解决了该问题,但发现为什么在Load事件中未调用该肽段还是很有趣的。

0 个答案:

没有答案