Home > Enterprise >  Check if the corresponding elements in two different list of dataframes are equal
Check if the corresponding elements in two different list of dataframes are equal

Time:12-07

I have a two separate list of dataframes. The first list of dataframe is lst1

$`1`
 [1] 8.523769e-05 6.615035e-05 1.177740e-04 1.173578e-04 8.798214e-05 6.328218e-05 4.768889e-05 3.658710e-05
 [9] 1.294623e-05 1.179838e-06 1.010590e-06 5.204994e-07 2.128048e-06 6.876634e-06 6.011750e-06 5.160903e-05
[17] 5.318722e-05 1.029438e-04 1.173397e-04

$`2`
 [1] 9.206525e-05 1.472897e-04 2.650569e-04 2.313355e-04 1.984725e-04 1.645034e-04 1.456210e-04 6.768821e-05
 [9] 4.187954e-05 4.823388e-05 4.279551e-05 4.191838e-05 5.642628e-05 8.094616e-05 1.013678e-04 2.232152e-04
[17] 2.255819e-04 2.358519e-04 2.645930e-04

$`3`
 [1] 0.0003263243 0.0009461198 0.0011599270 0.0009269332 0.0007441947 0.0021864953 0.0023836129 0.0019477809
 [9] 0.0006745046 0.0004784856 0.0005603616 0.0005089821 0.0005140971 0.0001900949 0.0002591991 0.0004950753
[17] 0.0005729661 0.0006404173 0.0007336286

The second list of dataframe is lst2

$`1`
 [1] 8.523769e-05 6.595870e-04 1.434451e-03 1.267164e-03 1.140118e-03 1.037180e-03 1.007861e-03 7.581415e-04
 [9] 1.294623e-05 1.179838e-06 1.010590e-06 5.204994e-07 2.128048e-06 5.297516e-04 5.515672e-04 5.510878e-04
[17] 5.635382e-04 6.966825e-04 7.091103e-04

$`2`
 [1] 1.335764e-03 1.534220e-03 7.072944e-04 2.313355e-04 1.984725e-04 1.645034e-04 1.456210e-04 6.768821e-05
 [9] 4.187954e-05 4.823388e-05 4.279551e-05 4.191838e-05 5.642628e-05 8.094616e-05 1.013678e-04 2.232152e-04
[17] 2.255819e-04 8.953077e-04 9.560716e-04

$`3`
 [1] 0.0003263243 0.0009461198 0.0011599270 0.0023806365 0.0030363610 0.0033131562 0.0027954296 0.0016694135
 [9] 0.0002395362 0.0002608362 0.0005603616 0.0005089821 0.0005140971 0.0001900949 0.0002591991 0.0004950753
[17] 0.0007601880 0.0009152222 0.0010781228

I am trying to check if the corresponding elements in lst1 is equal to lst2. If the elements are equal in the list it should return x, if not it should return o.

The solution for such example can be

$`1`
[1] 0 x x x x .....and so on
...

I tried writing a function to do that.

checkreferencevalue<- function (ref,attk){ifelse(ref == attk, 'x','o')}

But I cannot seem to make it work.

CodePudding user response:

You can use this:

c("o", "x")[mapply(identical, lst1, lst2)   1]

Reproducible demo:

lst1 = list(1:3, 4:6, 7:9)
lst2 = list(1:3, c(5, 5, 5), 7:9)
c("o", "x")[mapply(identical, lst1, lst2)   1]
# [1] "x" "o" "x"

For element-wise comparison within the lists:

mapply(\(x, y) c("o", "x")[(x == y)   1], lst1, lst2, SIMPLIFY = FALSE)
# [[1]]
# [1] "x" "x" "x"
# 
# [[2]]
# [1] "o" "x" "o"
# 
# [[3]]
# [1] "x" "x" "x"
  • Related