ここではSOなどのさまざまな議論を検討していますが、R関数から複数の非類似データ構造を返すと、彼らはlist(a, b)
として返され、インデックス0
と1
などによってアクセスされます。ただし、Perlプログラムの中でPL/Rを介してR関数を使用する場合、R list
関数はリストを平坦化し、さらに数値を文字列化します。例えば二つの配列が返されるので、動作しないdata.frame
を使用PL/RのR関数から複数の異なるデータ構造を返す
my $res = $sth->fetchrow_arrayref;
# now, $res is a single, flattened, stringified list
# even though the R function was supposed to return
# list([1, "foo", 3], [2, "bar"])
#
# instead, $res looks like c(\"1\", \""foo"\", \"3\", \"2\", \""bar"\")
# or some such nonsense
ために対称ではなく、機能croaks。
だから、私はPerlなどの単純$res->[0]
、$res->[1]
または$res->{'employees'}
から、個々のバンドルにアクセスすることができ、まだネストされたデータ構造の任意のセットで構成されてR関数から単一のデータ構造を返し、そしてどのように行います、 $res->{'pets'}
? 更新:私はPerlの5あるいは[[1, "foo", 3], {a => 2, b => "bar"}]
補遺のRの当量を探しています:私の質問の主な推進力は、PL/Rの関数から複数の異なるデータ構造を返す方法です。しかし、上記のような文字列化とセカンダリは、データをJSONに変換し、これらの余分な引用符をすべてサーバーとユーザーの間で転送される無駄なデータに追加するだけで問題になります。
perlは弱く型付けされているので、数字が文字列化されているかどうかは関係ありません。 – Ilion
質問の補足を明確にしました。簡潔に言えば、ストリンジェナイテーションは二次的な問題ですが、それは確かに問題です。 1つは、配列やハッシュのようにインデックスを使用して別のデータ構造体を取得することはできません.2つは、すべての余分な引用符を使ってデータを転送し、データ転送に太さを追加します。 – punkish