代码之家  ›  专栏  ›  技术社区  ›  Roman LuÅ¡trik

D剪切对象

s4 r
  •  8
  • Roman LuÅ¡trik  · 技术社区  · 14 年前

    一个人 dput() 一个物体?我试过了

    require(sp)
    require(splancs)
    plot(0, 0, xlim = c(-100, 100), ylim = c(-100, 100))
    poly.d <- getpoly() #draw a pretty polygon - PRETTY!
    poly.d <- rbind(poly.d, poly.d[1,]) # close the polygon because of Polygons() and its kin
    poly.d <- SpatialPolygons(list(Polygons(list(Polygon(poly.d)), ID = 1)))
    poly.d
    dput(poly.d)
    

    dput()

    1 回复  |  直到 12 年前
        1
  •  11
  •   nullglob    14 年前

    就目前的情况而言,你不能 dput dput公司

    if (isS4(x)) {
        cat("new(\"", class(x), "\"\n", file = file, sep = "")
        for (n in slotNames(x)) {
            cat("    ,", n, "= ", file = file)
            dput(slot(x, n), file = file, control = control)
        }
        cat(")\n", file = file)
        invisible()
    }
    

    > isS4(slot(poly.d,'polygons'))
    [1] FALSE
    > isS4(slot(poly.d,'polygons')[[1]])
    [1] TRUE
    

    编辑: 这里是一个围绕的局限性的工作 . 它适用于您提供的示例,但我不认为它一般适用(例如,它不处理属性)。

    dput2 <- function (x,
                       file = "",
                       control = c("keepNA", "keepInteger", "showAttributes")){
        if (is.character(file))
            if (nzchar(file)) {
                file <- file(file, "wt")
                on.exit(close(file))
            }
            else file <- stdout()
        opts <- .deparseOpts(control)
        if (isS4(x)) {
            cat("new(\"", class(x), "\"\n", file = file, sep = "")
            for (n in slotNames(x)) {
                cat("    ,", n, "= ", file = file)
                dput2(slot(x, n), file = file, control = control)
            }
            cat(")\n", file = file)
            invisible()
        } else if(length(grep('@',capture.output(str(x)))) > 0){
          if(is.list(x)){
            cat("list(\n", file = file, sep = "")
            for (i in 1:length(x)) {
              if(!is.null(names(x))){
                n <- names(x)[i]
                if(n != ''){
                  cat("    ,", n, "= ", file = file)
                }
              }
              dput2(x[[i]], file = file, control = control)
            }
            cat(")\n", file = file)
            invisible()
          } else {
            stop('S4 objects are only handled if they are contained within an S4 object or a list object')
          }
        }
        else .Internal(dput(x, file, opts))
    }
    

    这就是它的作用:

    > dput2(poly.d,file=(tempFile <- tempfile()))
    > poly.d2 <- dget(tempFile)
    > all.equal(poly.d,poly.d2)
    [1] TRUE