[rkward] /: Allow row-wise extraction of values from matrix-element
Thomas Friedrichsmeier
thomas.friedrichsmeier at ruhr-uni-bochum.de
Thu Jan 14 08:42:46 UTC 2016
Git commit f2c168f2c22be434a6b4003102c63424a0536c13 by Thomas Friedrichsmeier.
Committed on 14/01/2016 at 08:42.
Pushed by tfry into branch 'master'.
Allow row-wise extraction of values from matrix-element
M +1 -0 ChangeLog
M +4 -0 doc/rkwardplugins/index.docbook
M +27 -8 rkward/plugin/rkmatrixinput.cpp
M +2 -1 rkward/plugin/rkmatrixinput.h
http://commits.kde.org/rkward/f2c168f2c22be434a6b4003102c63424a0536c13
diff --git a/ChangeLog b/ChangeLog
index a4e601e..97b7504 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,4 @@
+- Add ability to extract <matrix> values row-wise in plugins
- Add convenience JS-function "makeOption()" for use in plugins
- Fixed: Numerical (display) precision setting was not honored in data editor
- Fix several window activation quirks in "Focus follows mouse" mode
diff --git a/doc/rkwardplugins/index.docbook b/doc/rkwardplugins/index.docbook
index bb5a9bf..b37deba 100644
--- a/doc/rkwardplugins/index.docbook
+++ b/doc/rkwardplugins/index.docbook
@@ -3902,6 +3902,10 @@ Child elements <true>, <false>, <case>, and <default> ta
<listitem><para>The data from a single column (0 for leftmost column). <function>getValue()</function>/<function>getString()</function> returns this as a single string, separated by "\n". However, the recommended way to get this is using <function>getList()</function>, which returns this column as an array of strings.</para></listitem>
</varlistentry>
<varlistentry>
+ <term>row.0,row.1,row.2...</term>
+ <listitem><para>The data from a single row (0 for topmost row). <function>getValue()</function>/<function>getString()</function> returns this as a single string, separated by "\n". However, the recommended way to get this is using <function>getList()</function>, which returns this column as an array of strings.</para></listitem>
+ </varlistentry>
+ <varlistentry>
<term>cbind</term>
<listitem><para>Data in a format suitable for pasting to R, wrapped in a cbind statement (string; read-only).</para></listitem>
</varlistentry>
diff --git a/rkward/plugin/rkmatrixinput.cpp b/rkward/plugin/rkmatrixinput.cpp
index 1ff8e35..434544b 100644
--- a/rkward/plugin/rkmatrixinput.cpp
+++ b/rkward/plugin/rkmatrixinput.cpp
@@ -2,7 +2,7 @@
rkmatrixinput - description
-------------------
begin : Tue Oct 09 2012
- copyright : (C) 2012, 2015 by Thomas Friedrichsmeier
+ copyright : (C) 2012-2016 by Thomas Friedrichsmeier
email : thomas.friedrichsmeier at kdemail.net
***************************************************************************/
@@ -128,6 +128,12 @@ QVariant RKMatrixInput::value (const QString& modifier) {
ret.append ("\tc (" + makeColumnString (i, ", ") + ')');
}
return QString ("cbind (\n" + ret.join (",\n") + "\n)");
+ } else if (modifier.startsWith ("row.")) {
+ bool ok;
+ int row = modifier.mid (4).toInt (&ok);
+ if ((row >= 0) && ok) {
+ return (rowStrings (row));
+ }
}
bool ok;
@@ -212,6 +218,12 @@ void RKMatrixInput::updateColumn (int column) {
updateAll ();
}
+QString pasteableValue (const QString &in, bool string) {
+ if (string) return (RObject::rQuote (in));
+ else if (in.isEmpty ()) return ("NA");
+ else return in;
+}
+
QString RKMatrixInput::makeColumnString (int column, const QString& sep, bool r_pasteable) {
RK_TRACE (PLUGIN);
@@ -224,13 +236,20 @@ QString RKMatrixInput::makeColumnString (int column, const QString& sep, bool r_
for (int i = 0; i < row_count->intValue (); ++i) {
if (i > 0) ret.append (sep);
const QString val = storage.value (i);
- if (r_pasteable) {
- if (mode == String) ret.append (RObject::rQuote (val));
- else if (val.isEmpty ()) ret.append ("NA");
- else ret.append (val);
- } else {
- ret.append (val);
- }
+ if (r_pasteable) ret.append (pasteableValue (val, mode == String));
+ else ret.append (val);
+ }
+ return ret;
+}
+
+QStringList RKMatrixInput::rowStrings (int row) {
+ RK_TRACE (PLUGIN);
+
+ QStringList ret;
+ ret.reserve (column_count->intValue ());
+ for (int i = 0; i < column_count->intValue (); ++i) {
+ if (i < columns.size ()) ret.append (columns[i].storage.value (row));
+ else ret.append (QString ());
}
return ret;
}
diff --git a/rkward/plugin/rkmatrixinput.h b/rkward/plugin/rkmatrixinput.h
index 541883e..4f1bdad 100644
--- a/rkward/plugin/rkmatrixinput.h
+++ b/rkward/plugin/rkmatrixinput.h
@@ -2,7 +2,7 @@
rkmatrixinput - description
-------------------
begin : Tue Oct 09 2012
- copyright : (C) 2012 by Thomas Friedrichsmeier
+ copyright : (C) 2012-2016 by Thomas Friedrichsmeier
email : thomas.friedrichsmeier at kdemail.net
***************************************************************************/
@@ -78,6 +78,7 @@ private:
void updateColumn (int column);
bool expandStorageForColumn (int column);
QString makeColumnString (int column, const QString& sep, bool r_pasteable = true);
+ QStringList rowStrings (int row);
bool isColumnValid (int column);
bool is_valid;
More information about the rkward-tracker
mailing list