2014-01-12 40 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應該能夠對每個元素i1:3 但是,爲什麼輸出看起來像這樣進行print (i)輸出。

此外,當我使用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的對應元素的結果。「

你舉的例子:

打印對象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)在不Assining列表中的一個對象的功能

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

3)內明確打印:

l1 <- lapply(1:3, function(x) print(x)) 
unlist(l1) 
# [1] 1 2 3