2

我正在使用 Rcpp 和 RInside 在 R 中运行一些命令。我制作了一个发送命令的个人 GUI(在 Qt 中),我想以 std::string 格式恢复结果。

例子 :

$ 1 + 1

结果是:

[1] 2

我想要这个字符串:

“[1] 2”

我已经用“as”和“as_string”检查了字符串转换,但是转换是 R 中实习生返回类型的无效原因。

是否可以读取 R 控制台输出或其他内容?

编辑:

void RppMainWindow::runLineOnScriptCursor() {
    std::string line = script->getCodeEditor()->lineOnCursor();
    if ( line.empty() || line == INVALID ) {
        return;
    }
    RCommand cmd (script->getConsoleViewer(), r);
    cmd.execute(line);
}

void RCommand::execute(std::string commande) {
    std::string res = executeOnR(commande);
    viewer->addEntry(commande, res);
}

void ConsoleViewer::addEntry(std::string command, std::string result) {
    this->moveCursor(QTextCursor::End);

    QTextCharFormat format;
    format.setFontWeight(QFont::DemiBold);
    format.setForeground(QBrush(QColor("red")));
    this->mergeCurrentCharFormat(format);
    std::string tmp = "> " + command + "\n";
    this->insertPlainText(QString(tmp.c_str()));


    this->moveCursor(QTextCursor::End);

    format.setFontWeight(QFont::Normal);
    format.setForeground(QBrush(QColor("blue")));
    this->mergeCurrentCharFormat(format);
    if ( ! result.empty() ) {
        result += "\n";
    }
    this->insertPlainText(QString(result.c_str()));
}

ConsoleViewer 允许像这样显示一个基本的 R 控制台

$R 命令

如果需要返回

4

1 回答 1

1

如果你想

“[1] 2”

您需要在您的最后设置一个格式化例程,接收2来自 RInside 并预先添加[1](其他行也是如此)。这正是print()R 中所做的:

edd@max:~$ R --slave -e 'print(1+1)'
[1] 2
edd@max:~$ R --slave -e 'cat(1+1, "\n")'
2 
edd@max:~$

我实际上更喜欢cat()我的结果,但print()也可以效仿。

于 2016-04-01T13:04:17.847 回答