[R-gregmisc-commits] r1625 - in pkg: BalloonPlotPaper SASxport SASxport/R SASxport/inst SASxport/man SASxport/src SASxport/tests SII SII/inst fork/src fork/tests gdata gdata/R gdata/inst gdata/inst/perl gdata/inst/perl/Spreadsheet gdata/inst/perl/Spreadsheet/ParseExcel gdata/inst/perl/Spreadsheet/ParseExcel/SaveParser gdata/inst/xls gdata/man gdata/tests gmodels gmodels/R gmodels/inst gmodels/man gplots gplots/R gplots/inst gplots/man gplots/tests gregmisc gregmisc/inst gtools gtools/R gtools/inst gtools/man

noreply at r-forge.r-project.org noreply at r-forge.r-project.org
Mon Apr 6 23:11:15 CEST 2015


Author: warnes
Date: 2015-04-06 23:11:14 +0200 (Mon, 06 Apr 2015)
New Revision: 1625

Added:
   pkg/gmodels/inst/ChangeLog
   pkg/gplots/inst/ChangeLog
   pkg/gregmisc/ChangeLog
   pkg/gregmisc/NEWS
   pkg/gregmisc/inst/ChangeLog
   pkg/gregmisc/inst/NEWS
   pkg/gtools/inst/ChangeLog
Removed:
   pkg/gregmisc/NEWS
Modified:
   pkg/BalloonPlotPaper/BalloonPlot.R
   pkg/BalloonPlotPaper/BalloonPlot.pdf
   pkg/BalloonPlotPaper/BalloonPlot.tex
   pkg/BalloonPlotPaper/Figure1.pdf
   pkg/BalloonPlotPaper/Figure2.pdf
   pkg/BalloonPlotPaper/Figure3.pdf
   pkg/BalloonPlotPaper/Figure4.pdf
   pkg/SASxport/DESCRIPTION
   pkg/SASxport/NAMESPACE
   pkg/SASxport/R/fstr.R
   pkg/SASxport/R/lookup.xport.R
   pkg/SASxport/R/make.formats.R
   pkg/SASxport/R/parseFormat.R
   pkg/SASxport/R/read.xport.R
   pkg/SASxport/R/write.xport.R
   pkg/SASxport/R/xport.R
   pkg/SASxport/R/xport.member.header.R
   pkg/SASxport/R/zzz.R
   pkg/SASxport/inst/NEWS
   pkg/SASxport/man/Alfalfa.Rd
   pkg/SASxport/man/SASxport-package.Rd
   pkg/SASxport/man/lookup.xport.Rd
   pkg/SASxport/man/read.xport.Rd
   pkg/SASxport/man/write.xport.Rd
   pkg/SASxport/src/SASxport.c
   pkg/SASxport/src/SASxport.h
   pkg/SASxport/src/ibm2ieee.c
   pkg/SASxport/src/ieee2ibm.c
   pkg/SASxport/src/init.c
   pkg/SASxport/src/test_fields.c
   pkg/SASxport/src/writeSAS.c
   pkg/SASxport/src/writeSAS.h
   pkg/SASxport/tests/Alfalfa_Test.R
   pkg/SASxport/tests/Alfalfa_Test.Rout.save
   pkg/SASxport/tests/Theoph.R
   pkg/SASxport/tests/Theoph.Rout.save
   pkg/SASxport/tests/cars.R
   pkg/SASxport/tests/cars.Rout.save
   pkg/SASxport/tests/testDates.R
   pkg/SASxport/tests/testDates.Rout.save
   pkg/SASxport/tests/testDuplicateNames.R
   pkg/SASxport/tests/testDuplicateNames.Rout.save
   pkg/SASxport/tests/testManyNames.R
   pkg/SASxport/tests/testManyNames.Rout.save
   pkg/SASxport/tests/testNegative.R
   pkg/SASxport/tests/testNegative.Rout.save
   pkg/SASxport/tests/testNumeric.R
   pkg/SASxport/tests/testNumeric.Rout.save
   pkg/SASxport/tests/testUnnamedComponents.R
   pkg/SASxport/tests/testUnnamedComponents.Rout.save
   pkg/SASxport/tests/test_as_is.R
   pkg/SASxport/tests/test_as_is.Rout.save
   pkg/SASxport/tests/test_fields.R
   pkg/SASxport/tests/test_fields.Rout.save
   pkg/SASxport/tests/xport.R
   pkg/SASxport/tests/xport.Rout.save
   pkg/SASxport/tests/xxx.R
   pkg/SASxport/tests/xxx.Rout.save
   pkg/SII/DESCRIPTION
   pkg/SII/inst/NEWS
   pkg/fork/src/fork.c
   pkg/fork/tests/test_many_fork_BSD.Rout.save
   pkg/fork/tests/test_many_fork_SysV.Rout.save
   pkg/fork/tests/test_many_fork_broken.Rout.save
   pkg/gdata/DESCRIPTION
   pkg/gdata/NAMESPACE
   pkg/gdata/R/aggregate.table.R
   pkg/gdata/R/installXLSXsupport.R
   pkg/gdata/R/keep.R
   pkg/gdata/R/ll.R
   pkg/gdata/R/mapLevels.R
   pkg/gdata/R/nobs.R
   pkg/gdata/R/sheetCount.R
   pkg/gdata/R/trim.R
   pkg/gdata/R/unknown.R
   pkg/gdata/R/xls2sep.R
   pkg/gdata/R/xlsFormats.R
   pkg/gdata/inst/NEWS
   pkg/gdata/inst/perl/Spreadsheet/ParseExcel.pm
   pkg/gdata/inst/perl/Spreadsheet/ParseExcel/Cell.pm
   pkg/gdata/inst/perl/Spreadsheet/ParseExcel/Dump.pm
   pkg/gdata/inst/perl/Spreadsheet/ParseExcel/FmtDefault.pm
   pkg/gdata/inst/perl/Spreadsheet/ParseExcel/FmtJapan.pm
   pkg/gdata/inst/perl/Spreadsheet/ParseExcel/FmtJapan2.pm
   pkg/gdata/inst/perl/Spreadsheet/ParseExcel/FmtUnicode.pm
   pkg/gdata/inst/perl/Spreadsheet/ParseExcel/Font.pm
   pkg/gdata/inst/perl/Spreadsheet/ParseExcel/Format.pm
   pkg/gdata/inst/perl/Spreadsheet/ParseExcel/SaveParser.pm
   pkg/gdata/inst/perl/Spreadsheet/ParseExcel/SaveParser/Workbook.pm
   pkg/gdata/inst/perl/Spreadsheet/ParseExcel/SaveParser/Worksheet.pm
   pkg/gdata/inst/perl/Spreadsheet/ParseExcel/Utility.pm
   pkg/gdata/inst/perl/Spreadsheet/ParseExcel/Workbook.pm
   pkg/gdata/inst/perl/Spreadsheet/ParseExcel/Worksheet.pm
   pkg/gdata/inst/perl/install_modules.pl
   pkg/gdata/inst/perl/module_tools.pl
   pkg/gdata/inst/perl/sheetCount.pl
   pkg/gdata/inst/perl/supportedFormats.pl
   pkg/gdata/inst/perl/xls2csv.pl
   pkg/gdata/inst/xls/ExampleExcelFile.xls
   pkg/gdata/inst/xls/ExampleExcelFile.xlsx
   pkg/gdata/man/gdata-package.Rd
   pkg/gdata/man/read.xls.Rd
   pkg/gdata/man/sheetCount.Rd
   pkg/gdata/tests/test.read.xls.R
   pkg/gdata/tests/test.read.xls.Rout.save
   pkg/gdata/tests/tests.write.fwf.Rout.save
   pkg/gmodels/DESCRIPTION
   pkg/gmodels/NAMESPACE
   pkg/gmodels/R/ci.R
   pkg/gmodels/R/estimable.R
   pkg/gmodels/R/estimable.mlm.R
   pkg/gmodels/inst/NEWS
   pkg/gmodels/man/ci.Rd
   pkg/gmodels/man/estimable.Rd
   pkg/gplots/DESCRIPTION
   pkg/gplots/NAMESPACE
   pkg/gplots/R/bandplot.R
   pkg/gplots/R/barplot2.R
   pkg/gplots/R/heatmap.2.R
   pkg/gplots/R/overplot.R
   pkg/gplots/R/plot.venn.R
   pkg/gplots/R/plotmeans.R
   pkg/gplots/R/sinkplot.R
   pkg/gplots/R/venn.R
   pkg/gplots/inst/NEWS
   pkg/gplots/man/bandplot.Rd
   pkg/gplots/man/barplot2.Rd
   pkg/gplots/man/ci2d.Rd
   pkg/gplots/man/heatmap.2.Rd
   pkg/gplots/man/hist2d.Rd
   pkg/gplots/man/lowess.Rd
   pkg/gplots/man/plotmeans.Rd
   pkg/gplots/man/sinkplot.Rd
   pkg/gplots/tests/heatmap2Test.R
   pkg/gplots/tests/heatmap2Test.Rout.save
   pkg/gregmisc/DESCRIPTION
   pkg/gtools/DESCRIPTION
   pkg/gtools/NAMESPACE
   pkg/gtools/R/addLast.R
   pkg/gtools/R/binsearch.R
   pkg/gtools/R/checkRVersion.R
   pkg/gtools/R/deprecated.R
   pkg/gtools/R/keywords.R
   pkg/gtools/R/mixedsort.R
   pkg/gtools/R/smartbind.R
   pkg/gtools/inst/NEWS
   pkg/gtools/man/gtools-deprecated.Rd
   pkg/gtools/man/keywords.Rd
   pkg/gtools/man/logit.Rd
   pkg/gtools/man/smartbind.Rd
Log:
Bring RForge codebase up to latest version on SourceForge.

Modified: pkg/BalloonPlotPaper/BalloonPlot.R
===================================================================
--- pkg/BalloonPlotPaper/BalloonPlot.R	2015-02-24 09:36:37 UTC (rev 1624)
+++ pkg/BalloonPlotPaper/BalloonPlot.R	2015-04-06 21:11:14 UTC (rev 1625)
@@ -1,7 +1,7 @@
 ####
 ## Figure 1
 ####
-.libPaths("~warneg/Rlib")
+##.libPaths("~warneg/Rlib")
 library(gplots)
 
 data(Titanic)

Modified: pkg/BalloonPlotPaper/BalloonPlot.pdf
===================================================================
(Binary files differ)

Modified: pkg/BalloonPlotPaper/BalloonPlot.tex
===================================================================
--- pkg/BalloonPlotPaper/BalloonPlot.tex	2015-02-24 09:36:37 UTC (rev 1624)
+++ pkg/BalloonPlotPaper/BalloonPlot.tex	2015-04-06 21:11:14 UTC (rev 1625)
@@ -268,11 +268,11 @@
 to the development of \code{balloonplot}, as well as for the code
 for displaying the row and column sums.
 
-\address{Gregory R. Warnes, Center for Biodefense Immune Modeling, 
-         Univeristy of Rochester, Rochester, NY, USA\\
-\email{warnes at bst.rochester.edu}\\
-       Nitin Jain, Smith Hanley Inc, USA\\
-\email{nitin.jain at pfizer.com}}
+\address{Gregory R. Warnes, Gregory R. Warnes Statistical Consulting,
+         Pittsford, NY, USA\\
+\email{greg at warnes.net}\\
+       Nitin Jain, Goldman Sachs, USA\\
+\email{emailnitinjain at gmail.com}}
 
 
 \begin{thebibliography}{3}

Modified: pkg/BalloonPlotPaper/Figure1.pdf
===================================================================
(Binary files differ)

Modified: pkg/BalloonPlotPaper/Figure2.pdf
===================================================================
(Binary files differ)

Modified: pkg/BalloonPlotPaper/Figure3.pdf
===================================================================
(Binary files differ)

Modified: pkg/BalloonPlotPaper/Figure4.pdf
===================================================================
(Binary files differ)

Modified: pkg/SASxport/DESCRIPTION
===================================================================
--- pkg/SASxport/DESCRIPTION	2015-02-24 09:36:37 UTC (rev 1624)
+++ pkg/SASxport/DESCRIPTION	2015-04-06 21:11:14 UTC (rev 1625)
@@ -1,36 +1,42 @@
 Package: SASxport
 Type: Package
 Title: Read and Write SAS XPORT Files
-Version: 1.3.0
-Date: 2012-06-29
+Version: 1.5.0
+Date: 2014-07-21
 Description: This package provides functions for reading, listing
-  the contents of, and writing SAS xport format files. 
+  the contents of, and writing SAS xport format files.
   The functions support reading and writing of either
   individual data frames or sets of data frames.  Further,
   a mechanism has been provided for customizing how
-  variables of different data types are stored. 
-Author: 
+  variables of different data types are stored.
+Author:
   Unless otherwise noted, the contents of this package were written by
   Gregory R. Warnes <greg at warnes.net> and are provided under the
-  terms of the GNU General Public License, version 2.0 or later. 
+  terms of the GNU General Public License, version 2.0 or later.
   --
-  The files 'ieee2ibm.c' and 'ibm2ieee.c' were extracted from BRL-CAD, 
-  file /brlcad/src/libbu/htond.c written by Michael John Muuss, 
-  Copyright (c) 2004-2007 United States Government as represented by
-  the U.S. Army Research Laboratory, and is utilized and redistributed
-  under the terms of the  GNU Lesser General Public License, version 2.1.
+  The files 'src/ieee2ibm.c' and 'src/ibm2ieee.c' were extracted from
+  BRL-CAD file /brlcad/src/libbu/htond.c written by Michael John
+  Muuss, Copyright (c) 2004-2007 United States Government as
+  represented by the U.S. Army Research Laboratory, and is utilized
+  and redistributed under the terms of the GNU Lesser General Public
+  License, version 2.1.
   --
-  The files 'AFirst.lib.s', 'all.is.numeric.R',
-  'importConvertDateTime.R', 'in.opererator.R', 'makeNames.R', 
-  'read.xport.R', and 'testDateTime.R' are copied or adapted from the
-  'Hmisc' package created by Frank E. Harrell, Jr. 
+  The files 'R/AFirst.lib.s', 'R/all.is.numeric.R',
+  'R/importConvertDateTime.R', 'R/in.opererator.R', 'R/makeNames.R',
+  'R/read.xport.R', and 'R/testDateTime.R' are copied or adapted from the
+  'Hmisc' package created by Frank E. Harrell, Jr.
   <f.harrell at vanderbilt.edu>, and are utilized and redistributed under
-  the terms of the GNU General Public License, version 2.0 or later. 
-  --     
+  the terms of the GNU General Public License, version 2.0 or later.
+  --
+  The files 'R/xport.R', 'src/SASxport.c', 'src/SASxport.h', and
+  'src/foreign.h' are copied or adapted from the R 'foreign' package
+  created by Douglas M. Bates <bates at stat.wisc.edu> and Saikat DebRoy
+  <saikat at stat.wisc.edu>, and are utilized and redistributed under the
+  terms of the GNU General Public License, version 2.0 or later.
+  --
   The creation of this package was partially funded by Metrum Institute
-  <http://metruminstitute.org>.  
+  <http://metruminstitute.org>.
 Maintainer: Gregory R. Warnes <greg at warnes.net>
 License: GPL-2
-Depends: R (>= 2.4.0)
-Imports: chron
+Depends: R (>= 2.4.0), chron, Hmisc
 URL: http://www.warnes.net, http://metruminstitute.org

Modified: pkg/SASxport/NAMESPACE
===================================================================
--- pkg/SASxport/NAMESPACE	2015-02-24 09:36:37 UTC (rev 1624)
+++ pkg/SASxport/NAMESPACE	2015-04-06 21:11:14 UTC (rev 1625)
@@ -2,24 +2,28 @@
 
 importFrom(chron, chron, times)
 importFrom(utils, packageDescription)
+importFrom(Hmisc, label, label.default, "label<-", "label<-.default")
 
 export(
        toSAS,
        lookup.xport,
        read.xport,
        write.xport,
-       "label",
-       "label<-",
+       ## "label",
+       ## "label<-",
 
        makeSASNames,
-       
+
        "SASformat",
        "SASformat<-",
-       
+
        "SASiformat",
-       "SASiformat<-"
-       )
+       "SASiformat<-",
 
+       "SAStype",
+       "SAStype<-"
+)
+
 S3method(toSAS, numeric)
 S3method(toSAS, logical)
 S3method(toSAS, character)
@@ -29,13 +33,15 @@
 S3method(toSAS, Date)
 S3method(toSAS, default)
 
-S3method(label, default)
+## S3method(label, default)
 S3method(SASformat, default)
 S3method(SASiformat, default)
+S3method(SAStype, default)
 
-S3method("label<-", default)
+## S3method("label<-", default)
 S3method("SASformat<-", default)
 S3method("SASiformat<-", default)
+S3method("SAStype<-", default)
 
 S3method(print, lookup.xport)
 S3method(summary, lookup.xport)

Modified: pkg/SASxport/R/fstr.R
===================================================================
--- pkg/SASxport/R/fstr.R	2015-02-24 09:36:37 UTC (rev 1624)
+++ pkg/SASxport/R/fstr.R	2015-04-06 21:11:14 UTC (rev 1625)
@@ -12,6 +12,8 @@
         else
           return( paste(name[i], length[i], '.', digits[i], sep='' ) )
       }
-    sapply( 1:length(name), inner)
-    
+    if(length(name)>0)
+      sapply( 1:length(name), inner)
+    else
+      character(0)
   }

Modified: pkg/SASxport/R/lookup.xport.R
===================================================================
--- pkg/SASxport/R/lookup.xport.R	2015-02-24 09:36:37 UTC (rev 1624)
+++ pkg/SASxport/R/lookup.xport.R	2015-04-06 21:11:14 UTC (rev 1625)
@@ -37,6 +37,7 @@
                                   "label"
                                   )
                                 ])
+        if(nrow(ret)==0) ret[1,] <- NA # ensure at least one row
         cbind(dataset=XX, ret, nobs=df$length)
       }
     

Modified: pkg/SASxport/R/make.formats.R
===================================================================
--- pkg/SASxport/R/make.formats.R	2015-02-24 09:36:37 UTC (rev 1624)
+++ pkg/SASxport/R/make.formats.R	2015-04-06 21:11:14 UTC (rev 1625)
@@ -76,14 +76,16 @@
     else
       formatName <- fname
     varLevels <- levels(var)
-    formats <- empty.format.table()    
-    for( j in 1:nlevels(var) )
-      formats <- add.format.entry(formats,
-                                  formatName,
-                                  j,
-                                  j,
-                                  varLevels[j]
-                                  )
+    formats <- empty.format.table()
+
+    if(nlevels(var)>0)
+      for( j in 1:nlevels(var) )
+        formats <- add.format.entry(formats,
+                                    formatName,
+                                    j,
+                                    j,
+                                    varLevels[j]
+                                    )
     formats
   }
 

Modified: pkg/SASxport/R/parseFormat.R
===================================================================
--- pkg/SASxport/R/parseFormat.R	2015-02-24 09:36:37 UTC (rev 1624)
+++ pkg/SASxport/R/parseFormat.R	2015-04-06 21:11:14 UTC (rev 1625)
@@ -3,7 +3,7 @@
   {
     retval <- list("name"="", "len"=0, "digits"=0)
 
-    
+
     if( !is.null(format) && (length(format)==1) && (format > "") )
               {
                 index <- regexpr("[0-9]+", format)
@@ -16,9 +16,9 @@
                 else
                   {
                     retval$name <- substr(format,0,index-1)[1]
-                    
-                    lenStr <- substr(format,index, nchar(format))
-                    
+
+                    lenStr <- substr(format, index, nchar(format))
+
                     index <- regexpr("\\.", lenStr)
                     if(index==-1)
                       {
@@ -31,10 +31,10 @@
                         retval$digits  <- as.numeric(substr(lenStr, index+1, nchar(lenStr)))
                       }
                   }
-                    
+
                 if(is.na(retval$len)) retval$len <- 0
                 if(is.na(retval$digits)) retval$digits <- 0
-                
+
               }
 
     return(retval)

Modified: pkg/SASxport/R/read.xport.R
===================================================================
--- pkg/SASxport/R/read.xport.R	2015-02-24 09:36:37 UTC (rev 1624)
+++ pkg/SASxport/R/read.xport.R	2015-04-06 21:11:14 UTC (rev 1625)
@@ -1,5 +1,5 @@
 ##
-## Code originally from Frank Harrell's 'Hmisc' library: 
+## Code originally from Frank Harrell's 'Hmisc' library:
 ##   http://biostat.mc.vanderbilt.edu/twiki/bin/view/Main/Hmisc
 ## Copied with permission on 2007-08-04
 ##
@@ -32,7 +32,7 @@
 
     if(length(grep('http://', file))>0 || length(grep('ftp://', file))>0 )
       {
-        scat("Downloading file...")        
+        scat("Downloading file...")
         tf <- tempfile()
         download.file(file, tf, mode='wb', quiet=TRUE)
         file <- tf
@@ -44,10 +44,13 @@
     file.header <- substr(file.header, start=1, stop=nchar(xport.file.header) )
     if( !identical(xport.file.header, file.header) )
       stop("The specified file does not start with a SAS xport file header!")
-           
+
     scat("Extracting data file information...")
     dsinfo <- lookup.xport.inner(file)
 
+    dsLabels <- sapply(dsinfo, label)
+    dsTypes  <- sapply(dsinfo, SAStype)
+
     if(length(keep))
       whichds <- toupper(keep)
     else
@@ -62,7 +65,7 @@
          names(ds) <- make.unique(names(ds))
        }
 
-    
+
     if( (length(keep)>0 || length(drop)>0) )
       ds <- ds[whichds]
 
@@ -79,7 +82,7 @@
         fds <- fds[1]
       }
     }
-  
+
     finfo <- NULL
     if(length(formats) || length(fds)) {
       if(length(formats))
@@ -99,13 +102,13 @@
     else
       names.tolower <- function(x) x
 
-    dsn <- tolower(which.regular)
+    dsn <- names.tolower(which.regular)
 
     res <- vector('list', nds)
     names(res) <- gsub('_','.',dsn)
 
 
-    possiblyConvertChar <- (is.logical(as.is) && !as.is) || 
+    possiblyConvertChar <- (is.logical(as.is) && !as.is) ||
                            (is.numeric(as.is) && as.is > 0)
     j <- 0
     for(k in which.regular) {
@@ -117,90 +120,91 @@
         else ds[[k]]
 
       scat('.')
-      
-      if(!length(w)) {
-        scat('Empty dataset', k, 'ignored\n')
-        next
-      }
 
+      label(w, self=TRUE)   <- dsLabels[k]
+      names(label(w, self=TRUE)) <- NULL
+      SAStype(w) <- dsTypes[k]
+      names(SAStype(w)) <- NULL
+
       nam      <- names.tolower(makeNames(names(w), allow=name.chars))
       names(w) <- nam
       dinfo    <- dsinfo[[k]]
 
-      fmt      <- sub('^\\$','',dinfo$format)
+      fmt <- dinfo$format
       formats  <- fstr( fmt, dinfo$flength, dinfo$fdigits)
 
-      ifmt     <- sub('^\\$','',dinfo$iformat)
+      ifmt <- dinfo$iformat
       iformats <- fstr( ifmt, dinfo$iflength, dinfo$ifdigits)
 
       lab      <- dinfo$label
-      
+
       ndinfo   <- names.tolower(makeNames(dinfo$name, allow=name.chars))
       names(lab) <- names(fmt) <- names(formats) <- names(iformats) <- ndinfo
-      for(i in 1:length(w)) {
-        changed <- FALSE
-        x  <- w[[i]]
-        fi <- fmt[nam[i]];
-        names(fi) <- NULL
-        if(fi != '' && length(finfo) && (fi %in% names(finfo))) {
-          f <- finfo[[fi]]
-          if(length(f)) {  ## may be NULL because had a range in format
-            x <- factor(x, f$value, f$label)
-            attr(x, 'SASformat') <- fi
-            changed <- TRUE
+      if(length(w)>0)
+        for(i in 1:length(w)) {
+          changed <- FALSE
+          x  <- w[[i]]
+          fi <- fmt[nam[i]];
+          names(fi) <- NULL
+          if(fi != '' && length(finfo) && (fi %in% names(finfo))) {
+            f <- finfo[[fi]]
+            if(length(f)) {  ## may be NULL because had a range in format
+              x <- factor(x, f$value, f$label)
+              attr(x, 'SASformat') <- fi
+              changed <- TRUE
+            }
           }
-        }
 
-        if(is.numeric(x)) {
-          if(fi %in% sasdateform) {
-            x <- importConvertDateTime(x, 'date', 'sas')
-            changed <- TRUE
-          } else if(fi %in% sastimeform) {
-            x <- importConvertDateTime(x, 'time', 'sas')
-            changed <- TRUE
-          } else if(fi %in% sasdatetimeform) {
-            x <- importConvertDateTime(x, 'datetime', 'sas')
-            changed <- TRUE
-          } else if(force.integer) {
-            if(all(is.na(x))) {
-              storage.mode(x) <- 'integer'
+          if(is.numeric(x)) {
+            if(fi %in% sasdateform) {
+              x <- importConvertDateTime(x, 'date', 'sas')
               changed <- TRUE
-            } else if(max(abs(x),na.rm=TRUE) <= (2^31-1) &&
-                      all(floor(x) == x, na.rm=TRUE)) {
-              storage.mode(x) <- 'integer'
+            } else if(fi %in% sastimeform) {
+              x <- importConvertDateTime(x, 'time', 'sas')
               changed <- TRUE
+            } else if(fi %in% sasdatetimeform) {
+              x <- importConvertDateTime(x, 'datetime', 'sas')
+              changed <- TRUE
+            } else if(force.integer) {
+              if(all(is.na(x))) {
+                storage.mode(x) <- 'integer'
+                changed <- TRUE
+              } else if(max(abs(x),na.rm=TRUE) <= (2^31-1) &&
+                        all(floor(x) == x, na.rm=TRUE)) {
+                storage.mode(x) <- 'integer'
+                changed <- TRUE
             }
+            }
+          } else if(possiblyConvertChar && is.character(x)) {
+            if((is.logical(as.is) && !as.is) ||
+               (is.numeric(as.is) && length(unique(x)) < as.is*length(x))) {
+              x <- factor(x, exclude='')
+              changed <- TRUE
+            }
           }
-        } else if(possiblyConvertChar && is.character(x)) {
-          if((is.logical(as.is) && !as.is) || 
-             (is.numeric(as.is) && length(unique(x)) < as.is*length(x))) {
-            x <- factor(x, exclude='')
-            changed <- TRUE
+
+          lz <- lab[nam[i]]
+          if(!is.null(lz) && length(lz)>0 && !is.na(lz) && lz != '') {
+            names(lz) <- NULL
+            label(x)  <- lz
+            changed   <- TRUE
           }
-        }
 
-        lz <- lab[nam[i]]
-        if(!is.null(lz) && length(lz)>0 && !is.na(lz) && lz != '') {
-          names(lz) <- NULL
-          label(x)  <- lz
-          changed   <- TRUE
-        }
+          if(nam[i] %in% names(formats)  && formats[nam[i]] > "" )
+            {
+              SASformat(x) <- formats[[nam[i]]]
+              changed <- TRUE
+            }
 
-        if( formats[nam[i]] > "" )
-          {
-            SASformat(x) <- formats[[nam[i]]]
+          if(nam[i] %in% names(iformats) && iformats[nam[i]] > "" )
+            {
+              SASformat(x) <- formats[[nam[i]]]
             changed <- TRUE
-          }
-      
-        if( iformats[nam[i]] > "" )
-          {
-            SASformat(x) <- formats[[nam[i]]]
-            changed <- TRUE
-          }
+            }
 
-        if(changed)
-          w[[i]] <- x
-      }
+          if(changed)
+            w[[i]] <- x
+        }
 
       scat('.')
 
@@ -212,15 +216,17 @@
     if( include.formats )
       {
         nds <- nds+1
-        if( length(fds)>0 ) 
+        if( length(fds)>0 )
           res$"FORMATS" <- ds[[fds]]
         else
           res$FORMATS <- empty.format.table()
       }
 
-    
     if(nds > 1 || as.list)
       res
     else
+      if(class(w)=="list")
+        w[[1]]
+    else
       w
   }

Modified: pkg/SASxport/R/write.xport.R
===================================================================
--- pkg/SASxport/R/write.xport.R	2015-02-24 09:36:37 UTC (rev 1624)
+++ pkg/SASxport/R/write.xport.R	2015-04-06 21:11:14 UTC (rev 1625)
@@ -1,13 +1,13 @@
 write.xport <- function(...,
                         list=base::list(),
-                        file = stop("'file' must be specified"), 
+                        file = stop("'file' must be specified"),
                         verbose=FALSE,
                         sasVer="7.00",
                         osType,
                         cDate=Sys.time(),
                         formats=NULL,
                         autogen.formats=TRUE
-                        ) 
+                        )
   {
 
     ## Handle verbose option ##
@@ -31,10 +31,10 @@
     dotNames <- names(dotList)
     if(is.null(dotNames)) dotNames <- rep("", length(dotList))
 
-    if(length(dotList)>0) 
+    if(length(dotList)>0)
       {
         ## Get data frame names from ... in function call, but don't
-        ## clobber any explicitly provided names 
+        ## clobber any explicitly provided names
         mc <- match.call()
         mc$file <- NULL
         mc$verbose <- NULL
@@ -45,8 +45,8 @@
         mc$autogen.formats <- NULL
         mc[[1]] <- NULL
         # note we *do not* mask off format argument so it will get
-        # magically included if present.  
-    
+        # magically included if present.
+
         mc <- as.character(mc)
 
         badNames <- which(is.na(dotNames) | dotNames<="")
@@ -59,7 +59,7 @@
       listNames <- rep("", length(list))
     dfList  <- c(dotList, list)
     dfNames <- c(dotNames, listNames)
-    
+
     ## check for and handle <NA> or empty names ##
     badNames <- which(is.na(dfNames) | dfNames<="")
     if(length(badNames)>0)
@@ -79,7 +79,7 @@
       if(length(not.df)==1)
         stop(paste("'", dfNames[not.df], "'"),
              " is not a data.frame object.")
-      else 
+      else
         stop(paste("'", dfNames[not.df], "'", sep="", collapse=", "),
              " are not data.frame objects.")
     ##
@@ -111,8 +111,8 @@
 
     #######
     scat("opening file ...")
-    if (is.character(file)) 
-      if (file == "") 
+    if (is.character(file))
+      if (file == "")
         file <- stdout()
       else {
         file <- file(description=file, open="wb")
@@ -123,8 +123,8 @@
     if(file==stdout())
       out <- function(...)
         {
-          cat("ASCII: ", rawToDisplay(...), "")
-          cat("HEX:   ", ..., "")
+          cat("ASCII: ", rawToDisplay(...), "\n")
+          cat("HEX:   ", ..., "\n")
         }
     else
       out <- function(...) writeBin( ..., raw(), con=file)
@@ -132,10 +132,10 @@
     scat("Write file header ...")
     out( xport.file.header( cDate=cDate, sasVer=sasVer, osType=osType ) )
     scat("Done.")
-    
+
     for(i in dfNames)
       {
-        
+
         df <- dfList[[i]]
 
         if(is.null(colnames(df)))
@@ -149,20 +149,26 @@
             dfList[[i]] <- df
           }
 
-        
+
         colnames(dfList[[i]]) <- colnames(df) <- varNames <- makeSASNames(colnames(df))
-        
-        offsetTable <- data.frame("name"=varNames, "len"=NA, "offset"=NA )
+
+        offsetTable <- data.frame("name"=varNames,
+                                  "len"=rep(NA, length(varNames)),
+                                  "offset"=rep(NA, length(varNames)) )
         rownames(offsetTable) <- offsetTable[,"name"]
 
+        dfLabel <- label(df, default="", self=TRUE )
+        dfType <- SAStype(df, default="")
+
         scat("Write data frame header ...")
-        out( xport.member.header(dfName=i, cDate=cDate, sasVer=sasVer, osType=osType ) )
+        out( xport.member.header(dfName=i, cDate=cDate, sasVer=sasVer, osType=osType,
+                                 dfLabel=dfLabel, dfType=dfType) )
         scat("Done.")
 
-        scat("Write variable informaton block header ...")
+        scat("Write variable information block header ...")
         out( xport.namestr.header( nvar=ncol(df) ) )
         scat("Done.")
-        
+
         scat("Write entries for variable information block ...")
         lenIndex <- 0
         varIndex <- 1
@@ -190,15 +196,10 @@
             offsetTable[i, "len"]    <- varLen
             offsetTable[i, "offset"] <- lenIndex
 
-
-            
-
             # parse format and iformat
             formatInfo  <- parseFormat(varFormat)
             iFormatInfo <- parseFormat(varIFormat)
-            
-            
-            
+
             # write the entry
             out(
                 xport.namestr(
@@ -207,7 +208,7 @@
                               varNum    = varIndex,
                               varPos    = lenIndex,
                               varLength = varLen,
-                              varLabel  = varLabel,        
+                              varLabel  = varLabel,
                               fName   = formatInfo$name,
                               fLength = formatInfo$len,
                               fDigits = formatInfo$digits,
@@ -226,8 +227,8 @@
 
         # Space-fill to 80 character record end
         fillSize <- 80 - (spaceUsed %% 80)
-        if(fillSize==80) fillSize <- 0        
-        out( xport.fill( TRUE, fillSize ) ) 
+        if(fillSize==80) fillSize <- 0
+        out( xport.fill( TRUE, fillSize ) )
 
         scat("Write header for data block ...")
         out( xport.obs.header() )
@@ -235,34 +236,37 @@
 
         scat("Write data ... ");
         spaceUsed <- 0
-        for(i in 1:nrow(df) )
-          for(j in 1:ncol(df) )
+        if(nrow(df)>0)
           {
-            val <- df[i,j]
-            valLen <- offsetTable[j,"len"]
+          for(i in 1:nrow(df) )
+            for(j in 1:ncol(df) )
+              {
+                val <- df[i,j]
+                valLen <- offsetTable[j,"len"]
 
-            scat("i=", i, " j=", j, " value=", val, " len=", valLen, "");
-            if(is.character( val ))
-              {
-                out(xport.character(val, width=valLen ) )
+                scat("i=", i, " j=", j, " value=", val, " len=", valLen, "");
+                if(is.character( val ))
+                  {
+                    out(xport.character(val, width=valLen ) )
+                  }
+                else
+                  out( xport.numeric( val ) )
+
+                spaceUsed <- spaceUsed + valLen
               }
-            else
-              out( xport.numeric( val ) )
+        }
 
-            spaceUsed <- spaceUsed + valLen
-          }
-        
         fillSize <- 80 - (spaceUsed %% 80)
         if(fillSize==80) fillSize <- 0
         out( xport.fill(TRUE, fillSize ) )
-        
+
         scat("Done.")
       }
 
     scat("Closing file ...")
-    if (is.character(file)) 
+    if (is.character(file))
       if (file != "")
-        {        
+        {
           close(file)
           on.exit()
         }

Modified: pkg/SASxport/R/xport.R
===================================================================
--- pkg/SASxport/R/xport.R	2015-02-24 09:36:37 UTC (rev 1624)
+++ pkg/SASxport/R/xport.R	2015-04-06 21:11:14 UTC (rev 1625)
@@ -23,12 +23,11 @@
 
 lookup.xport.inner <- function(file) .Call(xport_info, file)
 
-
 read.xport.inner <- function(file, stringsAsFactors=FALSE) {
     data.info <- lookup.xport.inner(file)
     ans <- .Call(xport_read, file, data.info)
-    if (length(ans) == 1)
-      as.data.frame(ans[[1]], stringsAsFactors=stringsAsFactors)
+    if (length(ans) == 1L)
+      as.data.frame(ans[[1L]], stringsAsFactors=stringsAsFactors)
     else
       lapply(ans, as.data.frame, stringsAsFactors=stringsAsFactors)
 }

Modified: pkg/SASxport/R/xport.member.header.R
===================================================================
--- pkg/SASxport/R/xport.member.header.R	2015-02-24 09:36:37 UTC (rev 1624)
+++ pkg/SASxport/R/xport.member.header.R	2015-04-06 21:11:14 UTC (rev 1625)
@@ -1,12 +1,15 @@
 `xport.member.header` <- 
-function( dfName, cDate=Sys.time(), mDate=cDate, sasVer="7.00", osType="Unknown" )
+function(dfName, cDate=Sys.time(), mDate=cDate, sasVer="7.00", osType="Unknown",
+         dfLabel="", dfType="" )
   {
     .C("fill_member_header",
        dfName = toupper(as.character(dfName)), # Name of data set
        sasVer = toupper(as.character(sasVer)), # SAS version number
        osType = as.character(osType),          # Operating System (can include lowercase)
-       cDate = xport.dateFMT(cDate),           # Creation date
-       mDate = xport.dateFMT(mDate),           # modification date
+       cDate  = xport.dateFMT(cDate),          # Creation date
+       mDate  = xport.dateFMT(mDate),          # modification date
+       dfLabel= as.character(dfLabel),         # Data set label
+       dfType = as.character(dfType),          # Data set type
        PACKAGE="SASxport"       
        )
 

Modified: pkg/SASxport/R/zzz.R
===================================================================
--- pkg/SASxport/R/zzz.R	2015-02-24 09:36:37 UTC (rev 1624)
+++ pkg/SASxport/R/zzz.R	2015-04-06 21:11:14 UTC (rev 1625)
@@ -9,13 +9,6 @@
   cat("\n")
 }
 
-
-
-.First.lib <- function(lib, pkg) {
-  library.dynam("SASxport", pkg, lib)
-  loadMessage()
-}
-
 .onLoad <- function(lib, pkg) {
   loadMessage()
 }

Modified: pkg/SASxport/inst/NEWS
===================================================================
--- pkg/SASxport/inst/NEWS	2015-02-24 09:36:37 UTC (rev 1624)
+++ pkg/SASxport/inst/NEWS	2015-04-06 21:11:14 UTC (rev 1625)
@@ -1,3 +1,105 @@
+Version 1.5.0 - 2014-07-21
+--------------------------
+
+Bug fixes:
+
+- Now works properly on big-endian systems such as the PowerPC,
+  Spark. (Reported by Brian Ripley )x
+
+- Explicitly cast left bit shifts to avoid undefined C language
+  behavior. (Reported by Brian Ripley)
+
+- Resolve problem in accessing "Hmisc::label.default<-" if
+  SASxport::read.xport is called without loading SASxport.  (Reported
+  by Dominic Comtois)
+
+- 'read.xport' now preserves '$' at the beginning of SAS character
+  format and iformat strings.  (Reported by Dominic Comtois)
+
+- 'read.xport' argument names.tolower was not being honored for
+   dataset names.  (Reported by Dominic Comtois)
+
+Other changes:
+
+- Modified several test files to display generated .xpt data so that
+  issues can be more easily detected and diagnosed.
+
+- C code cleanup and reorgaization to improve clarity.
+
+
+Version 1.4.0 - 2014-04-09
+--------------------------
+
+API Change:
+
+- SASxport now relies on the 'label' methods defined by the Hmisc
+  package instead of defining its own.
+
+Bug fixes:
+
+- The 'read.xport' and 'write.xport' functions were failing when both
+  the SASxport and the Hmisc packages were loaded due to conflicts
+  between the label methods defined by each package.  This has been
+  resolved by removing the label methods from SASxport and using those
+  from Hmisc instead.
+
+
+Version 1.3.6 2013-10-09
+------------------------
+
+Bug fixes:
+
+- In manual pages for read.xport() and lookup.xporT(): Update URL for
+  'test2.xpt', and use a local copy for executed example code.
+
+Version 1.3.5 2013-06-14
+------------------------
+
+Bug fixes:
+
+- read.xport() and write.xport() now properly handle empty
+  dataset/dataframe objects.
+
+Version 1.3.4 2013-05-31
+------------------------
+
+Bug fixes:
+
+- Correct error in write.xport when a factor contains only NA entries.
+
+Other Changes:
+
+- Package test scripts now use a fixed timezone to prevent unhelpful warnings.
+
+Version 1.3.2 2013-05-11
+------------------------
+
+New features:
+
+- dataset label and type are now supported.  See write.xport() and
+  read.xport() for examples.
+
+Bug fixes:
+
+- Integrate patch from foreign package to properly handle xport files
+  with datasets that end exactly on an 80-byte record boundry & add
+  corresponding test file.
+
+- Replace file.path(path.package(...)) with system.file(...)
+
+Changes:
+
+- Remove oboslete .First.lib() function
+
+- Replace file.path(path.package(...)) with system.file(...)
+
+Version 1.3.1 2013-03-24
+------------------------
+
+Changes:
+
+- Replace use of depreciated .path.package() with path.package() for R 3.0.0.
+
 Version 1.3.0 2012-06-27
 ------------------------
 
@@ -37,7 +139,7 @@
 Bug fixes:
 
 -  Apply patches to fix problems on 64 bit platforms, as sumitted by
-   Brian Ripley.  
+   Brian Ripley.
 
 
 Version 1.2.1 2007-11-05
@@ -63,27 +165,27 @@
 - Copies of the code for foreign::read.xport and foreign::lookup.xport
   is now part of the SASxport package, permitting extension to these
   functions as needed, and removing the dependency on the foreign
-  package. 
+  package.
 
 - Overflow of SASxport numeric format values, which have a smaller
   range than IEEE 754 numeric values now standard,  now generates NAN
-  instead of 0.0.  
+  instead of 0.0.
 
 
 Bug Fixes:
 
 - Fix for problem storing negative numbers.
 
-- SAS format length and digit information is now properly captured 
+- SAS format length and digit information is now properly captured
   by read.xport().  This is supported by an improved version of
-  lookup.xport(). 
+  lookup.xport().
 
-- SAS format information was not being properly utilized when more 
+- SAS format information was not being properly utilized when more
   than one format was present.
 
 - Improved handling of SAS date formats
- 
 
+
 Other:
 
 - Test routines added to test handling of numeric values.
@@ -95,7 +197,7 @@
 -  Display support information at package startup
 
 
-Version 1.1.0 - 
+Version 1.1.0 -
 -------------------------
 
 New Features:
@@ -133,7 +235,7 @@
 New features:
 
 - read.xport's names.tolower argument now defaults to FALSE so that
-  variable (and data set) names are now left as uppercase. 
+  variable (and data set) names are now left as uppercase.
 
 - Improved crediting of BRL-CAD source code
 
@@ -143,7 +245,7 @@
 
 Other:
 
-- Augmented ieee2ibm code with corresponding ibm2ieee code for 
+- Augmented ieee2ibm code with corresponding ibm2ieee code for
   completeness.
 
 
@@ -152,7 +254,7 @@
 
 New Features:
 
-- Replaced IEEE to IBM translation code with GPL'ed version from BPL-CAD. 
+- Replaced IEEE to IBM translation code with GPL'ed version from BPL-CAD.
 
 Bug Fixes:
 

Modified: pkg/SASxport/man/Alfalfa.Rd
===================================================================
--- pkg/SASxport/man/Alfalfa.Rd	2015-02-24 09:36:37 UTC (rev 1624)
+++ pkg/SASxport/man/Alfalfa.Rd	2015-04-06 21:11:14 UTC (rev 1625)
@@ -30,7 +30,7 @@
 
 # go were the data is...
 here <- getwd()
-setwd(file.path(.path.package("SASxport"),"extdata"))
+setwd(system.file("extdata",package="SASxport"))
 
 # Description of the file contents
 lookup.xport("Alfalfa.xpt")

Modified: pkg/SASxport/man/SASxport-package.Rd
===================================================================
--- pkg/SASxport/man/SASxport-package.Rd	2015-02-24 09:36:37 UTC (rev 1624)
+++ pkg/SASxport/man/SASxport-package.Rd	2015-04-06 21:11:14 UTC (rev 1625)
@@ -12,7 +12,7 @@
 \details{
   The \code{read.xport} function reads SAS xport formatted files,
   augmenting the functionality of the \code{\link[foreign]{read.xport}}
-  function provided in the 'foreign' package with additional features
+  function provided in the 'foreign' package with additional features,
   borrowed from \code{\link[Hmisc]{sasxport.get}} in Frank Harrell's
   'Hmisc' package.  Namely, variables are properly coerced into the
   types specified by the format field. All standard numeric and string
@@ -21,7 +21,10 @@
   in the xport file via:
 \preformatted{
      PROC FORMAT CNTLOUT=format;
-}
+   }
+   In addition, labels are supported for variable and data frames, as
+   are dataset 'types'.
+   
    The \code{write.xport} function writes one or more data sets into a
    SAS xport formatted file.  Standard R data types, including date and
    time objects (e.g. \code{Date}, and \code{POSIX.t}) are stored with
@@ -57,19 +60,25 @@
   are provided under the terms of the GNU General Public License,
   version 2.0 or later.
 
-  The file 'htond.c' is extracted from BRL-CAD
-  \url{http://www.brlcad.org/}, written by Michael John Muuss, and is 
-  Copyright (c) 2004-2007 United States Government as represented by
-  the U.S. Army Research Laboratory, and is utilized and redistributed
-  under the terms of the  GNU Lesser General Public License, version 2.1.
+  The files 'src/ieee2ibm.c' and 'src/ibm2ieee.c' were extracted from
[TRUNCATED]

To get the complete diff run:
    svnlook diff /svnroot/r-gregmisc -r 1625


More information about the R-gregmisc-commits mailing list