私はR用のさらに別のGUIフロントエンドに取り組んでいます(主に、多かれ少なかれ関連する資料でQt4を研究するため)、関連するコンポーネントの異常な動作に遭遇しました。QProcess 経由で 76 文字以上の行を R の stdin に書き込もうとすると、出力 (コマンドのエコー) にゴミが含まれて返され、行の一部が繰り返されます。例えば:
freq.some <- recode(freq, "'some' = 'no'; 'all or most' = 'yes'; else = NA");
としてエコーされます
freq.some <- recode(freq, "'some' = 'no'; 'all or most' = 'yes'; else = NA"
< "'some' = 'no'; 'all or most' = 'yes'; else =
NA") ;
QByteArray レベルで出力を操作しようとしましたが、異常は既に存在します。
Qt のバージョンは 4.6.3、R v. 2.11.1、Debian Squeeze です。関連するコード スニペットは次のとおりです。
これがRのプロセスを開始する方法です:
arrr = new QProcess(this);
QString program = "R --interactive --no-readline";
arrr->start(program, QProcess::Unbuffered | QProcess::ReadWrite);
これは、R のプロセスにコマンドを書き込む方法です。
QString cmd = ui->lineEdit->displayText();
QString tmp = cmd + "\n";
arrr->write(tmp.toUtf8().data());
これは、プロセスの出力を読み取る方法です。
QByteArray output;
QTextStream *ts = new QTextStream(&output);
output = arrr->readAllStandardOutput();
QString r_output = ts->readAll();
プロセスからの読み取りは、readyRead() シグナルで発生します。
私の質問がこのサイトの承認された基準に準拠していない場合は、あらかじめお詫び申し上げます。ありがとうございました。