2015-04-02 2 views
2

Я бегу outer на функцию, которая возвращает список, и я жду его, чтобы вернуть массив списков, так как документация говорит так:Используя внешний, чтобы произвести массив списков

The outer product of the arrays X and Y is the array A with dimension c(dim(X), dim(Y)) where element A[c(arrayindex.x, arrayindex.y)] = FUN(X[arrayindex.x], Y[arrayindex.y], ...).

Однако следующий код выдает ошибку:

outer(1:5, 1:5, Vectorize(function(x, y) list(x=x, y=y))) 
#Error in outer(1:5, 1:5, Vectorize(function(x, y) list(x = x, y = y))) : 
# dims [product 25] do not match the length of object [50] 

кажется, что outer пытается сгладить свои списки, в то время как я хотел бы, чтобы они были неповрежденными. Кажется, нет никакого параметра для управления этим (в отличие от simplify для sapply). Что бы вы предложили? Мое единственное требование - сохранить по крайней мере два измерения для целей индексации по линии.

+1

ли эта помощь 'наружная (1: 5, 1: 5 список, Vectorize (функция (х, у) (с (х = х, у = Y))))' или может быть 'внешняя (1: 5, 1: 5, Vectorize (список функций (x, y) (список (x = x, y = y)))) – akrun

+0

На каком языке это? – Peter

+0

@akrun Оба в порядке. У вас есть понимание, почему эта, казалось бы, избыточная оболочка 'list' или' c' изменяет внешнее поведение? – tonytonov

ответ

2

Вы можете попробовать

outer(1:5, 1:5, Vectorize(function(x,y) list(c(x=x, y=y)))) 

, которые выводят список из 25 элементов, с каждый из которых именованный Вектор

или другой вариант будет обернуть это в «список», чтобы создать список списков ,

outer(1:5, 1:5, Vectorize(function(x,y) list(list(x=x, y=y)))) 
Смежные вопросы