Search code examples
rsublist

R the same element to sublists


I have a list m containing sublists. One sublist is like:

> m[[1]]
$input
$input$a
[1] 1

$input$b
[1] 2

$input$c
[1] 3


$output
$output$y
[1] "big dog"

The entire list is:

[[1]]
[[1]]$input
[[1]]$input$a
[1] 1

[[1]]$input$b
[1] 2

[[1]]$input$c
[1] 3


[[1]]$output
[[1]]$output$y
[1] "big dog"



[[2]]
[[2]]$input
[[2]]$input$a
[1] 12

[[2]]$input$b
[1] 89

[[2]]$input$c
[1] 67


[[2]]$output
[[2]]$output$y
[1] "fat cat"



[[3]]
[[3]]$input
[[3]]$input$a
[1] 7

[[3]]$input$b
[1] 4

[[3]]$input$c
[1] 97


[[3]]$output
[[3]]$output$y
[1] "fat cat"

And the code is:

m<-list(
     list(
          input=list(a=1,b=2,c=3), 
          output=list(y="big dog")
     ),
     list(
          input=list(a=12,b=89,c=67),
          output=list(y="fat cat")
     ), 
     list(
          input=list(a=7,b=4,c=97), 
          output=list(y="fat cat")
     )
)

Now I want to add to each subsublist named 'input' the same variable named type and containing value "pet" to have:

  m
  [[1]]
  [[1]]$input
  [[1]]$input$a
  [1] 1

  [[1]]$input$b
  [1] 2

  [[1]]$input$c
  [1] 3

  [[1]]$input$type
  [1] "pet"


  [[1]]$output
  [[1]]$output$y
  [1] "big dog"



  [[2]]
  [[2]]$input
  [[2]]$input$a
  [1] 12

  [[2]]$input$b
  [1] 89

  [[2]]$input$c
  [1] 67

  [[2]]$input$type
  [1] "pet"


  [[2]]$output
  [[2]]$output$y
  [1] "fat cat"



  [[3]]
  [[3]]$input
  [[3]]$input$a
  [1] 7

  [[3]]$input$b
  [1] 4

  [[3]]$input$c
  [1] 97

  [[3]]$input$type
  [1] "pet"


  [[3]]$output
  [[3]]$output$y
  [1] "fat cat"

I tried:

Map(function(u) c(u$input, type="pet"))

But it does not work as it filter the list :( Do yo have any idea?


Solution

  • If I understand you correctly, I think you just want

    m<-lapply(m, function(x) {x$input$type<-"pet";x})
    

    That will add $type="pet" to every input in your list. Resulting in

    list(
        list(
            input = list(a = 1, b = 2, c = 3, type = "pet"),
            output = list(y = "big dog")
        ),
        list(
            input = list(a = 12, b = 89, c = 67, type = "pet"),
            output = list(y = "fat cat")
        ),
        list(
            input = list(a = 7, b = 4, c = 97, type = "pet"),
            output = list(y = "fat cat")
        )
    )