Я смотрел различные дискуссии здесь о SO и других местах, и общий консенсус кажется, что если кто-то возвращает несколько не похожих структур данных из функции R, их лучше всего вернуть как list(a, b)
, а затем получить доступпо индексам 0
и 1
и так далее.За исключением того, что при использовании функции R через PL / R внутри Perl-программы функция R list
сглаживает список, а также выравнивает даже числа.Например,
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
Использование data.frame
не работает, потому что два возвращаемых массива не симметричны, а функция квакает.
Итак, как мне вернуть отдельные данныеструктура из функции R, которая состоит из произвольного набора вложенных структур данных, и при этом может иметь доступ к каждому отдельному пакету из Perl как просто $res->[0]
, $res->[1]
или $res->{'employees'}
, $res->{'pets'}
? update : Я ищу R эквивалент эквивалента Perl [[1, "foo", 3], [2, "bar"]]
или даже [[1, "foo", 3], {a => 2, b => "bar"}]
addendum : Основная идея моего вопроса - как вернуть несколькоразнородные структуры данных из функции PL / R.Однако строковая спецификация, как отмечено выше, и вторичная, также проблематичны, потому что я преобразую данные в JSON, а все эти дополнительные кавычки просто добавляют к бесполезным данным, передаваемым между сервером и пользователем.