Revision: 1178
http://r-gregmisc.svn.sourceforge.net/r-gregmisc/?rev=1178&view=rev
Author: warnes
Date: 2007-09-12 18:19:37 -0700 (Wed, 12 Sep 2007)
Log Message:
-----------
Add checking and handling for unnamed data frames or variables
Modified Paths:
--------------
trunk/SASxport/R/write.xport.R
Modified: trunk/SASxport/R/write.xport.R
===================================================================
--- trunk/SASxport/R/write.xport.R 2007-09-13 01:14:55 UTC (rev 1177)
+++ trunk/SASxport/R/write.xport.R 2007-09-13 01:19:37 UTC (rev 1178)
@@ -34,11 +34,18 @@
mc$osType <- NULL
mc$cDate <- NULL
mc[[1]] <- NULL
+
mc <- as.character(mc)
if(is.null(dfNames))
{
dfNames <- mc
}
+ if(length(dfNames) < length(list))
+ {
+ warning("Fewer names than datasets. Creating default names.")
+ dfNames[length(dfNames):length(list)] = "NONAME"
+ }
+
dfNames[dfNames==""] <- mc[dfNames==""]
names(list) <- dfNames
@@ -96,9 +103,11 @@
dfNames[long.names] <- new.names
}
- scat("Ensure object names are unique...\n")
- if(any(duplicated(dfNames)))
- stop("object names are not unique: ", paste(1:length(dfNames),":'",dfNames,"'",sep="",collapse=", " ))
+ scat("Ensure object names are valid and unique...\n")
+ dfNames <- substr(make.names(dfNames, unique=TRUE),1,8)
+ if( all(names(list)!=dfNames))
+ warning("Data frame names modified to obey SAS rules")
+ names(list) <- dfNames
@@ -129,7 +138,26 @@
{
df <- list[[i]]
- varNames <- colnames(df)
+
+ if(is.null(colnames(df)))
+ colnames(df) <- list(length=ncol(df))
+
+ emptyFlag <- ( colnames(df)=="" | is.na(colnames(df)) )
+ if(any(emptyFlag))
+ {
+ warning("Unnamed variables detected. Creating defalut variable names.")
+ colnames(df)[emptyFlag] = "NONAME"
+ list[[i]] <- df
+ }
+
+ varNames <- substr(make.names(colnames(df), unique=TRUE),1,8)
+ if( any(colnames(df)!=varNames))
+ {
+ warning("Variable names modified to obey SAS rules")
+ colnames(df) <- varNames
+ list[[i]] <- df
+ }
+
offsetTable <- data.frame("name"=varNames, "len"=NA, "offset"=NA )
rownames(offsetTable) <- offsetTable[,"name"]
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|