gpt4 book ai didi

c++ - 使用 RInside 阅读 R 控制台

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:14:02 25 4
gpt4 key购买 nike

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

示例:

$ 1 + 1

结果是:

[1] 2

我想要这个字符串:

"[1] 2"

我已经用“as”和“as_string”检查了字符串转换,但由于 R 中的 intern 返回类型,转换无效。

是否可以读取 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 command

return if needed

最佳答案

如果你愿意

"[1] 2"

您需要在您的终端设置一个格式化例程,该例程从 RInside 接收 2 并添加 [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() 也可以被模拟。

关于c++ - 使用 RInside 阅读 R 控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36353435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com