将纸盒包装解决方案写入 txt 或 csv - R

  • 本文关键字:txt csv 包装 解决方案 r
  • 更新时间 :
  • 英文 :


我从这里使用 R 中的 BoxPackaging 包

尽管我已经以多种方式对其进行了操作,但基础是我无法将解决方案导出到 txt 或最好是 csv。我尝试按照此处的建议转换为数据框或为 txt 写行,但不断收到错误:

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

是否有人足够熟悉此软件包以提供帮助?

谢谢

CSV似乎是一个糟糕的选择,因为它是一个嵌套结构。JSON会更合适。

首先,为自定义对象定义一些 json 序列化程序:

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
        )
    ),
    ...
  )
})

然后,只需在对象上调用 jsonlite::toJSON()

[
  [
    {
      "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
      }
    }
  ]
] 

最新更新