J'ai examiné diverses discussions ici sur SO et d'autres endroits, et le consensus général semble que si l'on renvoie plusieurs structures de données non similaires à partir d'une fonction R, ils sont mieux retournés comme list(a, b)
et ensuite accédés par les index 0
et 1
et ainsi de suite. Sauf, lors de l'utilisation d'une fonction R via PL/R dans un programme Perl, la fonction R list
aplatit la liste et même les nombres. Par exemplerenvoyant plusieurs structures de données dissemblables de la fonction R dans PL/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
L'utilisation d'un data.frame
ne fonctionne pas parce que les deux tableaux retournés ne sont pas symétriques, et la fonction croassements.
Alors, comment puis-je retourner une seule structure de données à partir d'une fonction R qui est composée d'un ensemble arbitraire de structures de données imbriquées, et toujours être en mesure d'accéder à chaque paquet individuel de Perl comme un simple $res->[0]
, $res->[1]
ou $res->{'employees'}
, $res->{'pets'}
? mise à jour: Je cherche un equiv R de Perl [[1, "foo", 3], [2, "bar"]]
ou même [[1, "foo", 3], {a => 2, b => "bar"}]
addendum: Le principal objectif de ma question est de savoir comment retourner plusieurs structures de données différentes d'une fonction PL/R. Cependant, la stringification, comme indiqué ci-dessus, et secondaire, est également problématique car je convertis les données en JSON, et toutes ces citations supplémentaires s'ajoutent simplement aux données inutiles transférées entre le serveur et l'utilisateur.
Puisque perl est faiblement typé, cela n'aura aucune importance si les nombres sont stringifiés. – Ilion
Ajout d'un addenda clarifiant à la question. Brièvement, alors que la stringification est un problème secondaire, c'est effectivement un problème. Premièrement, je ne peux pas obtenir les structures de données séparées à l'aide d'index comme je le ferais avec un tableau ou un hachage, et deux, toutes les citations supplémentaires viennent gonfler les travaux, ajoutant de la graisse à mon transfert de données. – punkish