Возврат нескольких вещей функцией, которая многократно запускается replicate () - PullRequest
0 голосов
/ 07 декабря 2010

Предположим, что в R есть функция, которая возвращает список векторов, и функция запускается с replicate () много раз.Тогда возврат из реплики представляет собой 2D матрицу списков.

Мне было интересно, как сформировать вектор, который состоит из некоторого определенного компонента в некотором конкретном векторе списка, возвращаемого при каждом запуске функции с replicate ()?

НапримерКак создать вектор из всех последних компонентов в последних векторах во всех списках, возвращаемых функцией replicate () функции myf ()?Обратите внимание, что все такие компоненты в этом примере имели значение 6.

> myf<-function(){list(c(1,2),c(3,4),c(5,6))}
> out=replicate(4, myf())
> out[3,][[]][2]
Error in out[3, ][[]] : invalid subscript type 'symbol'
> out[3,]
[[1]]
[1] 5 6

[[2]]
[1] 5 6

[[3]]
[1] 5 6

[[4]]
[1] 5 6
> out[3,][[1]][2]
[1] 6
> out[3,][[2]][2]
[1] 6
> out[3,][[4]][2]
[1] 6
> out[3,][[3]][2]
[1] 6

Если у вас есть лучший способ вернуть несколько вещей с помощью функции, которая потенциально запускается с повторением, пожалуйста, не стесняйтесь отвечать.

Спасибо и всего наилучшего!

Ответы [ 2 ]

2 голосов
/ 07 декабря 2010

Я думаю, вам нужно сделать это поэтапно. Первый взгляд на:

> out
     [,1]      [,2]      [,3]      [,4]     
[1,] Numeric,2 Numeric,2 Numeric,2 Numeric,2
[2,] Numeric,2 Numeric,2 Numeric,2 Numeric,2
[3,] Numeric,2 Numeric,2 Numeric,2 Numeric,2

Матрица списка числовых режимов, и вы, очевидно, хотите работать только со строками этой матрицы, поэтому давайте рассмотрим последние элементы в каждой строке:

> str( apply(out, 2, tail, 1) )
List of 4
 $ :List of 1
  ..$ : num [1:2] 5 6
 $ :List of 1
  ..$ : num [1:2] 5 6
 $ :List of 1
  ..$ : num [1:2] 5 6
 $ :List of 1
  ..$ : num [1:2] 5 6

Итак, у вас есть список списков. Давайте составим просто список векторов:

> str( lapply( apply(out, 2, tail, 1), "[[", 1) )
List of 4
 $ : num [1:2] 5 6
 $ : num [1:2] 5 6
 $ : num [1:2] 5 6
 $ : num [1:2] 5 6

И получите последний элемент каждого:

> sapply(lapply( apply(out, 2, tail, 1), "[[", 1), tail, 1)
[1] 6 6 6 6
1 голос
/ 07 декабря 2010

Хотелось бы что-то вроде:

unlist (out) [c (6,12,18,24)]

OR

as.data.frame (out [3,]) [2,]

Работа у вас?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...