2015-12-02 2 views
3

Я пытаюсь подмножество некоторых векторов на основе условия. Подмножество их индивидуально дает мне другое поведение (правильное), чем запуск подмножества в списке, содержащем их. Это может быть легко, что я не могу заметить.Подмножество объекта списка на основе логического оператора

Подменит индивидуально:

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

Это дает:

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

Подменит в то время как в списке, используя lapply и тот же метод Подменит как функции (т.е. 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

Вам нужно вернуть 'x' из функции' q <- lapply (w, function (x) {x [x == 5] <- 0; x}) ' –

+0

@RichardScriven Это отлично работает. – athraa

ответ

1

Как примечания @RichardScriven в комментариях, вам нужно вернуть x в вашу функцию lapply. Когда вы пишете функцию, возвращаемое значение либо явно указывается (через 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 
} 
Смежные вопросы