基于逻辑语句对列表对象进行子集化
问题描述:
我想根据条件对一些向量子集。分别对它们进行子集赋予我不同的行为(正确的),而不是在包含它们的列表上运行子集。这可能是一件容易的事情,我不会注意到。基于逻辑语句对列表对象进行子集化
子集单独:
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
答
由于@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
}
您需要从'q
@RichardScriven函数返回'x'。 – athraa