2015-05-01 32 views
0

如何[R在列表中找到的第一個和第二個元素(grep的)「你好」?當在lapply中不使用直接功能時。意外行爲用grep時lapply

test_list <- list(c("",""),"",c("hello","goodbye"),c("hello")) 
lapply(test_list,grep,"hello") 

[[1]] 
[1] 1 

[[2]] 
[1] 1 

[[3]] 
[1] 1 

[[4]] 
[1] 1 

使用函數符號鍵入它好像又回到人們所期望的:

lapply(test_list, function(x) grep("hello",x)) 
[[1]] 
integer(0) 

[[2]] 
integer(0) 

[[3]] 
[1] 1 

[[4]] 
[1] 1 

那是什麼造成的結果兩者之間的區別?

+2

第一個是'grep(c('',''),'hello')''不是'grep('hello',c('',''))'這可能是你想要的認爲。 'test_list'首先被傳遞到grep,那麼第二個參數「你好」,通過兩者的位置,因爲你沒有他們的名字:'lapply(test_list,grep的,模式=「你好」)' – rawr

+0

@rawr聽起來像答案對我來說。只是一件多麼'lapply'通過ARGS(以上acurately,grep'如何'接受參數) –

+1

你必須愛R的功能和多麼的相似交換它們的參數順序....無盡的樂趣 – smci

回答

2

記住:

  1. grep預計其第一個參數是要搜索的字符串(而不是字符串中搜索)。
  2. lapply經過矢量/列表的每個元素來遍歷,作爲第一個參數所提供的功能。
+0

我敢肯定,布蘭登知道這,但只是忘了片刻。它發生在我們所有人身上。 –

+0

欣賞自信的投票,但我撓了腦袋幾分鐘,像......我做了什麼? –