зацикливание функции which () над списком фреймов с помощью lapply - PullRequest
0 голосов
/ 11 октября 2019

У меня проблема с циклическим повторением функции which () над списком фреймов данных. Мне нужно заменить все числа> 1 на 1. Вот мой код.

mylist_b <- lapply(mylist_a, function(x){
                                          x[which(x>1)] <- 1
                                    })

Вот один из моих фреймов данных mylist_a

                                       D1           D2         D3
a                              0.68659264 1.047092e+01  1.0009219
b                              0.02358574 7.992743e-04  0.3253237
c                              5.23294642 1.130614e+01  5.6566890
d                              2.86947631 7.860165e+00 15.0000000
e                              8.09922178 8.196586e+00 15.0000000
f                             15.00000000 1.500000e+01  1.8389688

Когда я запускаю свой код, я получаю mylist_b, но это список числовых векторов с только одним значением для каждоговектор.

> mylist_b$dataframe_a
[1] 1
> class(mylist_b$dataframe_a)
[1] "numeric"

Вместо этого, когда я запускаю функцию which () на каждом отдельном фрейме данных, она отлично работает

mylist_a$dataframe_a[which(mylist_a$dataframe_a>1)] <- 1

вот результат

                                       D1           D2           D3
a                             6.865926e-01 1.000000e+00 1.000000e+00
b                             2.358574e-02 7.992743e-04 3.253237e-01
c                             1.000000e+00 1.000000e+00 1.000000e+00
d                             1.000000e+00 1.000000e+00 1.000000e+00
e                             1.000000e+00 1.000000e+00 1.000000e+00
f                             1.000000e+00 1.000000e+00 1.000000e+00

Может кто-нибудь помочьс этим?

Ответы [ 2 ]

2 голосов
/ 11 октября 2019

Это сработает, если вы вернете x назад

lapply(mylist_a, function(x){
    x[x>1] <- 1
    x
})

Другой вариант - использовать pmin

lapply(mylist_a, function(x) pmin(as.matrix(x), 1))
0 голосов
/ 11 октября 2019

Также можно использовать replace

lapply(mylist_a, function(x) replace(x, x > 1, 1))
...