>>>>> Richard M Heiberger <r...@temple.edu> >>>>> on Sun, 26 Feb 2017 15:46:07 -0500 writes:
> Bill, > this looks good. Can you add it to the splus2R package? Well, the natural place would rather be the foreign package, and some of use R core members would be happy with maintaining a function with \author{Bill Dunlap} Martin > Rich > On Sun, Feb 26, 2017 at 11:57 AM, William Dunlap via R-help > <r-help@r-project.org> wrote: >> You should be looking for foreign::data.restore, not data.dump nor read.S. >> >> In any case, I think that foreign::data.restore does not recognize S-version4 >> data.dump files, ones whose first line is >> ## Dump S Version 4 Dump ## >> Here is a quickly written and barely tested function that should read >> data.frames >> and other simple S+ objects in SV4 data.dump files. It stores the >> objects it reads >> from the file 'file' in the environment 'env'. >> >> data.restore4 <- function(file, print = FALSE, verbose = FALSE, env = >> .GlobalEnv) >> { >> if (!inherits(file, "connection")) { >> file <- file(file, "r") >> on.exit(close(file)) >> } >> lineNo <- 0 >> nextLine <- function(n = 1) { >> lineNo <<- lineNo + n >> readLines(file, n = n) >> } >> Message <- function(...) { >> if (verbose) { >> message(simpleMessage(paste("(line ", lineNo, ") ", >> paste(..., collapse = " "), sep = ""), sys.call(-1))) >> } >> } >> Stop <- function(...) { >> stop(simpleError(paste(paste(..., collapse = " "), sep = "", >> " (file ", deparse(summary(file)$description), ", line ", >> lineNo, ")"), sys.call(-1))) >> } >> txt <- nextLine() >> stopifnot(txt == "## Dump S Version 4 Dump ##") >> .data.restore4 <- function() >> { >> class <- nextLine() >> mode <- nextLine() >> length <- as.numeric(tmp <- nextLine()) >> if (is.na(length) || length%%1 != 0 || length < 0) { >> Stop("Expected nonnegative integer 'length' at line ", >> lineNo, " but got ", deparse(tmp)) >> } >> if (mode == "character") { >> nextLine(length) >> } else if (mode == "logical") { >> txt <- nextLine(length) >> lglVector <- rep(NA, length) >> lglVector[txt != "N"] <- as.logical(as.integer(txt[txt != "N"])) >> lglVector >> } else if (mode %in% c("integer", "single", "numeric")) { >> txt <- nextLine(length) >> txt[txt == "M"] <- "NaN" >> txt[txt == "I"] <- "Inf" >> txt[txt == "J"] <- "-Inf" >> atomicVector <- rep(as(NA, mode), length) >> atomicVector[txt != "N"] <- as(txt[txt != "N"], mode) >> atomicVector >> } else if (mode == "complex") { >> txt <- nextLine(length) >> txt <- gsub("M", "NaN", txt) >> txt <- gsub("\\<I\\>", "Inf", txt) >> txt <- gsub("\\<J\\>", "-Inf", txt) >> atomicVector <- rep(as(NA, mode), length) >> atomicVector[txt != "N"] <- as(txt[txt != "N"], mode) >> atomicVector >> } else if (mode == "list") { >> vectors <- lapply(seq_len(length), function(i).data.restore4()) >> vectors >> } else if (mode == "NULL") { >> NULL >> } else if (mode == "structure") { >> vectors <- lapply(seq_len(length), function(i).data.restore4()) >> if (class == ".named_I" || class == "named") { >> if (length != 2) { >> Stop("expected length of '.named_I' component is >> 2, but got ", length) >> } else if (length(vectors[[1]]) != length(vectors[[2]])) { >> Stop("expected lengths of '.named_I' components to >> be the same, but got ", length(vectors[[1]]), " and ", >> length(vectors[[2]])) >> } else if (!is.character(vectors[[2]])) { >> Stop("expected second component of '.named_I' to >> be character, but got ", deparse(mode(vectors[[2]]))) >> } >> names(vectors[[1]]) <- vectors[[2]] >> if (identical(vectors[[2]][1], ".Data")) { # a hack - >> really want to know if vectors[[1] had mode "structure" or not >> do.call(structure, vectors[[1]], quote = TRUE) >> } else { >> vectors[[1]] >> } >> } else { >> vectors # TODO: is this ok? It assumes that is within >> a .Named_I/structure >> } >> } else if (mode == "name") { >> if (length != 1) { >> Stop("expected length of 'name' objects is 1, but got", length) >> } >> as.name(nextLine()) >> } else if (mode == "call") { >> callList <- lapply(seq_len(length), function(i).data.restore4()) >> as.call(callList) >> } else { >> Stop("Unimplemented mode: ", deparse(mode)) >> } >> } >> while (length(objName <- nextLine()) == 1) { >> Message(objName, ": ") >> obj <- .data.restore4() >> Message("class ", deparse(class(obj)), ", size=", >> object.size(obj), "\n") >> assign(objName, obj, envir=env) >> } >> } >> >> >> >> Bill Dunlap >> TIBCO Software >> wdunlap tibco.com >> >> >> On Sun, Feb 26, 2017 at 4:28 AM, roslinazairimah zakaria >> <roslina...@gmail.com> wrote: >>> Hi Michael, >>> >>> Yes, I did tried and still got error: >>> >>> >>>> library(foreign) >>> >>>> data.dump(oldStyle=TRUE) >>> Error in eval(expr, envir, enclos) : could not find function "data.dump" >>>> source(.trPaths[5], echo=TRUE, max.deparse.length=150) >>> >>>> read.S(file.path("C:/Users/FTSI/Desktop/2 ICGPA/1ACTIVITY.sdd")) >>> Error in read.S(file.path("C:/Users/FTSI/Desktop/2 ICGPA/1ACTIVITY.sdd")) : >>> not an S object >>> >>> Thank you. >>> >>> On Sun, Feb 26, 2017 at 8:12 PM, Michael Dewey <li...@dewey.myzen.co.uk> >>> wrote: >>>> >>>> Did you do >>>> library(foreign) >>>> first? >>>> >>>> >>>> On 26/02/2017 07:23, roslinazairimah zakaria wrote: >>>>> >>>>> Hi William, >>>>> >>>>> Thank you so much for your reply. >>>>> >>>>> However, I still got error message: >>>>> >>>>> data.dump(oldStyle=TRUE) >>>>> >>>>> Error: could not find function "data.dump" >>>>>> >>>>> data.restore("C:/Users/FTSI/Desktop/2 ICGPA/1ACTIVITY.sdd") >>>>> >>>>> Error: could not find function "data.restore" >>>>> >>>>> Thank you. >>>>> >>>>> >>>>> >>>>> On Sun, Feb 26, 2017 at 12:42 AM, William Dunlap <wdun...@tibco.com> >>>>> wrote: >>>>> >>>>> The sdd file extension may mean that the file is in S+ 'data dump' >>>>> format, >>>>> made by S+'s data.dump function and readable in S+ by its data.restore >>>>> function. >>>>> foreign::data.restore can read some such files in R, but I think it >>>>> may only read well >>>>> those with using the pre-1991 format made in more recent versions of >>>>> S+ with data.dump(old.style=TRUE). >>>>> Bill Dunlap >>>>> TIBCO Software >>>>> wdunlap tibco.com >>>>>> >>>>>> >>>>> On Fri, Feb 24, 2017 at 8:58 PM, roslinazairimah zakaria >>>>> <roslina...@gmail.com> wrote: >>>>>>> >>>>>>> Dear r-users, >>>>>>> >>>>>>> I would like to read S-Plus data (.ssd) into R. I tried this: >>>>>>> >>>>>>> library(foreign) >>>>>>> read.S("C:/Users/FTSI/Desktop/2 ICGPA/1ACTIVITY.sdd") >>>>>>> >>>>>>> and got this message: >>>>>>> >>>>>>> read.S("C:/Users/FTSI/Desktop/2 ICGPA/1ACTIVITY.sdd") >>>>>>> Error in read.S("C:/Users/FTSI/Desktop/2 ICGPA/1ACTIVITY.sdd") : >>>>>>> not an S object >>>>>>> >>>>>>> What is wrong with this? Thank you so much for your help. >>>>>>> >>>>>>> -- >>>>>>> *Roslinazairimah Zakaria* >>>>>>> *Tel: +609-5492370; Fax. No.+609-5492766* >>>>>>> >>>>>>> *Email: roslinazairi...@ump.edu.my <roslinazairi...@ump.edu.my>; >>>>>>> roslina...@gmail.com <roslina...@gmail.com>* >>>>>>> Faculty of Industrial Sciences & Technology >>>>>>> University Malaysia Pahang >>>>>>> Lebuhraya Tun Razak, 26300 Gambang, Pahang, Malaysia >>>>>>> >>>>>>> [[alternative HTML version deleted]] >>>>>>> >>>>>>> ______________________________________________ >>>>>>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see >>>>>>> https://stat.ethz.ch/mailman/listinfo/r-help >>>>>>> PLEASE do read the posting guide http://www.R-project.org/ >>>>>> >>>>> posting-guide.html >>>>>>> >>>>>>> and provide commented, minimal, self-contained, reproducible code. >>>>>> >>>>>> >>>>> >>>>> >>>>> >>>> >>>> -- >>>> Michael >>>> http://www.dewey.myzen.co.uk/home.html >>> >>> >>> >>> >>> -- >>> Roslinazairimah Zakaria >>> Tel: +609-5492370; Fax. No.+609-5492766 >>> Email: roslinazairi...@ump.edu.my; roslina...@gmail.com >>> Faculty of Industrial Sciences & Technology >>> University Malaysia Pahang >>> Lebuhraya Tun Razak, 26300 Gambang, Pahang, Malaysia >> >> ______________________________________________ >> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.