-2

I am using the BoxPacking package in R from here

Although I have manipulated it in many ways, the base is that I cannot export the solution to txt or preferably csv. I've tried converting to data frame or writing lines for txt as suggested here, but keep getting errors:

Error in as.data.frame.default(x[[i]], optional = TRUE) : 
  cannot coerce class "structure("Container", package = "BoxPacking")" to a data.frame

Is anyone familiar enough with this package to assist please?

Thanks

Rhys
  • 51
  • 4

1 Answers1

1

CSV seems like a bad choice for this since it's a nested structure. JSON wld be far more appropriate.

First, define some json serializers for the custom objects:

library(jsonlite)

setMethod(jsonlite:::asJSON, "Box", function(x, ...) {
  jsonlite:::asJSON(
    list(
      Box = 
        list(
          origin = x@origin,
          length = unbox(x@length),
          height = unbox(x@height),
          width = unbox(x@width)
        )
    ),
    ...
  )
})

setMethod(jsonlite:::asJSON, "EMS", function(x, ...) {
  jsonlite:::asJSON(
    list(
      EMS = list(
        origin = x@origin,
        length = unbox(x@length),
        height = unbox(x@height),
        width = unbox(x@width)
      )
    ),
    ...
  )
})

setMethod(jsonlite:::asJSON, "Container", function(x, ...) {
  jsonlite:::asJSON(
    list(
      Container = 
        list(
          origin = x@origin,
          length = unbox(x@length),
          height = unbox(x@height),
          width = unbox(x@width),
          ems = x@ems
        )
    ),
    ...
  )
})

then, just call jsonlite::toJSON() on the object:

[
  [
    {
      "Container": {
        "origin": [0, 0, 0],
        "length": 2,
        "height": 2,
        "width": 2,
        "ems": [
          {
            "EMS": {
              "origin": [0, 0, 0],
              "length": 2,
              "height": 2,
              "width": 2
            }
          }
        ]
      }
    }
  ],
  [
    {
      "Container": {
        "origin": [0, 0, 0],
        "length": 2,
        "height": 2,
        "width": 2,
        "ems": [
          {
            "EMS": {
              "origin": [0, 0, 0],
              "length": 2,
              "height": 2,
              "width": 2
            }
          }
        ]
      }
    }
  ],
  [
    {
      "Container": {
        "origin": [0, 0, 0],
        "length": 2,
        "height": 2,
        "width": 2,
        "ems": [
          {
            "EMS": {
              "origin": [0, 0, 0],
              "length": 2,
              "height": 2,
              "width": 2
            }
          }
        ]
      }
    }
  ],
  [
    {
      "Container": {
        "origin": [0, 0, 0],
        "length": 2,
        "height": 2,
        "width": 2,
        "ems": [
          {
            "EMS": {
              "origin": [0, 1.9, 0],
              "length": 2,
              "height": 0.1,
              "width": 2
            }
          },
          {
            "EMS": {
              "origin": [0, 0, 1.9],
              "length": 2,
              "height": 2,
              "width": 0.1
            }
          },
          {
            "EMS": {
              "origin": [1.4, 0.9, 0],
              "length": 0.6,
              "height": 1.1,
              "width": 0.4
            }
          },
          {
            "EMS": {
              "origin": [0.4, 0.9, 0.4],
              "length": 0.1,
              "height": 0.5,
              "width": 1.6
            }
          },
          {
            "EMS": {
              "origin": [0, 1.8, 0],
              "length": 0.4,
              "height": 0.2,
              "width": 0.4
            }
          },
          {
            "EMS": {
              "origin": [0, 1.4, 1.5],
              "length": 2,
              "height": 0.6,
              "width": 0.5
            }
          },
          {
            "EMS": {
              "origin": [0, 1, 1.4],
              "length": 0.4,
              "height": 1,
              "width": 0.6
            }
          },
          {
            "EMS": {
              "origin": [0, 1, 1.5],
              "length": 0.5,
              "height": 1,
              "width": 0.5
            }
          },
          {
            "EMS": {
              "origin": [0, 1, 1.4],
              "length": 0.5,
              "height": 0.4,
              "width": 0.6
            }
          },
          {
            "EMS": {
              "origin": [0.9, 1.4, 0],
              "length": 1.1,
              "height": 0.6,
              "width": 0.5
            }
          },
          {
            "EMS": {
              "origin": [1.4, 1.4, 0],
              "length": 0.6,
              "height": 0.6,
              "width": 2
            }
          },
          {
            "EMS": {
              "origin": [1.5, 1.3, 0],
              "length": 0.5,
              "height": 0.7,
              "width": 2
            }
          },
          {
            "EMS": {
              "origin": [1, 1.3, 1.5],
              "length": 1,
              "height": 0.7,
              "width": 0.5
            }
          },
          {
            "EMS": {
              "origin": [1, 0, 1.4],
              "length": 1,
              "height": 0.9,
              "width": 0.6
            }
          },
          {
            "EMS": {
              "origin": [1.4, 1.3, 0.9],
              "length": 0.6,
              "height": 0.7,
              "width": 1.1
            }
          },
          {
            "EMS": {
              "origin": [1, 1.3, 0.9],
              "length": 1,
              "height": 0.1,
              "width": 1.1
            }
          },
          {
            "EMS": {
              "origin": [1.4, 0, 0.8],
              "length": 0.6,
              "height": 0.4,
              "width": 0.1
            }
          },
          {
            "EMS": {
              "origin": [1.5, 0, 0],
              "length": 0.5,
              "height": 2,
              "width": 0.4
            }
          },
          {
            "EMS": {
              "origin": [1.8, 0, 0],
              "length": 0.2,
              "height": 2,
              "width": 0.9
            }
          },
          {
            "EMS": {
              "origin": [1.5, 0, 0.8],
              "length": 0.5,
              "height": 2,
              "width": 0.1
            }
          },
          {
            "EMS": {
              "origin": [1.5, 0.4, 0],
              "length": 0.5,
              "height": 1.6,
              "width": 0.9
            }
          },
          {
            "EMS": {
              "origin": [1.8, 0, 0],
              "length": 0.2,
              "height": 0.5,
              "width": 2
            }
          },
          {
            "EMS": {
              "origin": [1.5, 0, 0.8],
              "length": 0.5,
              "height": 0.5,
              "width": 1.2
            }
          },
          {
            "EMS": {
              "origin": [1.5, 0.4, 0],
              "length": 0.5,
              "height": 0.1,
              "width": 2
            }
          },
          {
            "EMS": {
              "origin": [0.8, 0, 1.4],
              "length": 1.2,
              "height": 0.4,
              "width": 0.6
            }
          },
          {
            "EMS": {
              "origin": [0.4, 0, 1.8],
              "length": 1.6,
              "height": 0.4,
              "width": 0.2
            }
          },
          {
            "EMS": {
              "origin": [0.4, 0, 1.8],
              "length": 0.1,
              "height": 2,
              "width": 0.2
            }
          },
          {
            "EMS": {
              "origin": [0.4, 0.4, 1.5],
              "length": 0.1,
              "height": 1.6,
              "width": 0.5
            }
          },
          {
            "EMS": {
              "origin": [0.4, 0.4, 1.4],
              "length": 0.1,
              "height": 1,
              "width": 0.6
            }
          }
        ]
      }
    },
    {
      "Box": {
        "origin": [0, 0, 0],
        "length": 1,
        "height": 1,
        "width": 0.4
      }
    },
    {
      "Box": {
        "origin": [0, 0, 0.4],
        "length": 1,
        "height": 0.4,
        "width": 1
      }
    },
    {
      "Box": {
        "origin": [0, 0.4, 0.4],
        "length": 0.5,
        "height": 0.5,
        "width": 1
      }
    },
    {
      "Box": {
        "origin": [0.5, 0.4, 0.4],
        "length": 1,
        "height": 1,
        "width": 0.5
      }
    },
    {
      "Box": {
        "origin": [0, 0.9, 0.4],
        "length": 0.4,
        "height": 1,
        "width": 1
      }
    },
    {
      "Box": {
        "origin": [0.5, 0.4, 0.9],
        "length": 0.5,
        "height": 1,
        "width": 1
      }
    },
    {
      "Box": {
        "origin": [1, 0, 0],
        "length": 0.5,
        "height": 0.4,
        "width": 0.4
      }
    },
    {
      "Box": {
        "origin": [1, 0, 0.9],
        "length": 0.5,
        "height": 0.5,
        "width": 0.5
      }
    },
    {
      "Box": {
        "origin": [0, 1, 0],
        "length": 1,
        "height": 0.4,
        "width": 0.4
      }
    },
    {
      "Box": {
        "origin": [1, 0.4, 0],
        "length": 0.5,
        "height": 0.5,
        "width": 0.4
      }
    },
    {
      "Box": {
        "origin": [1, 0, 0.4],
        "length": 0.4,
        "height": 0.4,
        "width": 0.5
      }
    },
    {
      "Box": {
        "origin": [0, 0, 1.4],
        "length": 0.4,
        "height": 1,
        "width": 0.5
      }
    },
    {
      "Box": {
        "origin": [1, 0.9, 0],
        "length": 0.4,
        "height": 0.5,
        "width": 0.4
      }
    },
    {
      "Box": {
        "origin": [1, 0.5, 0.9],
        "length": 1,
        "height": 0.4,
        "width": 0.5
      }
    },
    {
      "Box": {
        "origin": [0, 1.4, 0],
        "length": 0.4,
        "height": 0.4,
        "width": 0.4
      }
    },
    {
      "Box": {
        "origin": [0.4, 1.4, 0],
        "length": 0.5,
        "height": 0.5,
        "width": 0.5
      }
    },
    {
      "Box": {
        "origin": [0.4, 1.4, 0.5],
        "length": 1,
        "height": 0.5,
        "width": 1
      }
    },
    {
      "Box": {
        "origin": [1, 0.9, 0.9],
        "length": 1,
        "height": 0.4,
        "width": 1
      }
    },
    {
      "Box": {
        "origin": [1.4, 0, 0.4],
        "length": 0.4,
        "height": 0.4,
        "width": 0.4
      }
    },
    {
      "Box": {
        "origin": [0.4, 0, 1.4],
        "length": 0.4,
        "height": 0.4,
        "width": 0.4
      }
    }
  ]
] 
hrbrmstr
  • 77,368
  • 11
  • 139
  • 205