我正在使用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命令
如果需要,返回
答案 0 :(得分:1)
如果你想要
“[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()
。