基于逻辑语句对列表对象进行子集化

问题描述:

我想根据条件对一些向量子集。分别对它们进行子集赋予我不同的行为(正确的),而不是在包含它们的列表上运行子集。这可能是一件容易的事情,我不会注意到。基于逻辑语句对列表对象进行子集化

子集单独:

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

+0

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

由于@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 
}