2014-01-12 3 views
0

Я пытаюсь играть с функцией lapplyфункции и вывод lapply

lapply(1:3, function(i) print(i)) 
# [1] 1 
# [1] 2 
# [1] 3 
# [[1]] 
# [1] 1 

# [[2]] 
# [1] 2 

# [[3]] 
# [1] 3 

Я понимаю, что lapply должен быть в состоянии выполнить print (i) против каждого элемента i среди 1:3 Но почему выход выглядит следующим образом.

Кроме того, когда я использую unlist, я получаю выход как следующий

unlist(lapply(1:3, function(i) print(i))) 
# [1] 1 
# [1] 2 
# [1] 3 
# [1] 1 2 3 
+3

да, вы получите распечатку, а затем объект, который возвращается печатаются в неявном виде. Если вы сохраните вывод в объекте, вы не увидите вторую часть. 'l <- lapply (1: 5, function (x) print (i))' –

+1

или использовать 'invisible()' –

+3

Пожалуйста, не используйте изображения для представления кода. –

ответ

1

Описание lapply функции заключается в следующем:

«lapply возвращает список той же длины, что и X , каждый элемент которого является результатом применения FUN к соответствующему элементу X. "

Ваш пример:

печать объект х и возвращает список длины 3.

str(lapply(1:3, function(x) print(x))) 
# [1] 1 
# [1] 2 
# [1] 3 
# List of 3 
# $ : int 1 
# $ : int 2 
# $ : int 3 

Есть несколько способов, чтобы избежать этого, как указано в комментариях:

1) Использование невидимых

lapply(1:3, function(x) invisible(x)) 
# [[1]] 
# [1] 1 

# [[2]] 
# [1] 2 

# [[3]] 
# [1] 3 

unlist(lapply(1:3, function(x) invisible(x))) 
# [1] 1 2 3 

2) Без явной печати внутри функций

unlist(lapply(1:3, function(x) x)) 
# [1] 1 2 3 

3) Assining списка к объекту:

l1 <- lapply(1:3, function(x) print(x)) 
unlist(l1) 
# [1] 1 2 3 
Смежные вопросы