2016-04-08 3 views
2

Я новичок в R. Я практиковал функцию lapply() и sapply(): lapply() возвращает список, а sapply() возвращается как вектор/матрица. Теперь я не понимаю, почему lapply() и sapply() имеют тот же результат, что и список?Почему sapply() и lapply() имеют одинаковый результат?

> x1 <- lapply(list(1:3, 25:29), function(x) {2*x}) 
> x2 <- sapply(list(1:3, 25:29), function(x) {2*x}) 
> x1 
[[1]] 
[1] 2 4 6 

[[2]] 
[1] 50 52 54 56 58 

> x2 
[[1]] 
[1] 2 4 6 

[[2]] 
[1] 50 52 54 56 58 

> str(x2) 
List of 2 
$ : num [1:3] 2 4 6 
$ : num [1:5] 50 52 54 56 58 
> mode(x2) 
[1] "list" 

После этого, я проверил unlist() и возвратил тот же ввод, что и вектор. Трудно понять, почему в результате возвращается тип списка sapply().

спасибо.

+2

[этот ответ] (http://stackoverflow.com/a/7141669/4002530) стоит прочитать. – tospig

ответ

5

Если length из list элементов не то же самое, sapply не принуждать его к матрице и будет иметь тот же результат, как lapply

Мы можем проверить использование ?sapply и ?lapply

(X, FUN, ...)

sapply (X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)

simplify=TRUE является тот, который преобразует list равной выходной длины к matrix

+1

Спасибо большое! Теперь я понимаю! : D –

Смежные вопросы