2015-12-02 84 views
3

我想根據條件對一些向量子集。分別對它們進行子集賦予我不同的行爲(正確的),而不是在包含它們的列表上運行子集。這可能是一件容易的事情,我不會注意到。基於邏輯語句對列表對象進行子集化

子集單獨:

a<-1:10 
b<-11:20 
a[a==5]<-0 
a 

這給了:當在列表中使用lapply和相同子集技術作爲函數

> a 
[1] 1 2 3 4 0 6 7 8 9 10 

子集(即x[x==5]<-0):

a<-1:10 
b<-11:20 
w<-list(a,b) 
q<-lapply(w, function(x){x[x==5]<-0}) 
q 

這給出:

> q 
[[1]] 
[1] 0 

[[2]] 
[1] 0 
+5

您需要從'q < - lapply(w,function(x){x [x == 5] < - 0; x})'' –

+0

@RichardScriven函數返回'x'。 – athraa

回答

1

由於@RichardScriven在註釋中註釋,您需要在您的lapply函數中返回x。當你編寫一個函數時,返回值是明確指定的(通過return(...))或被視爲執行的最後一個語句。相反

lapply(w, function(x) { 
    x <- x[x==5] # subsets a single element 
    return(x <- 0) # returns only a single element 
} 

,你想只有一個元素改變容器(矢量),然後返回整個容器:

當你寫它,你的函數執行以下

lapply(w, function(x) { 
    x[x==5] <- 0 # modify only a single element 
    return(x) # return the whole vector 
} 
相關問題