Nothing
## Test setup
if(FALSE) {
library("RUnit")
library("gdata")
}
test.write.fwf <- function()
{
## 'x' must be a data.frame or matrix
checkException(write.fwf(1:10))
checkException(write.fwf(list(1:10)))
## Only single value is allowed in 'na'
checkException(write.fwf(data.frame(1:10, letters[1:10]), na=c("", " ")))
## Example dataset
num <- round(c(733070.345678, 1214213.78765456, 553823.798765678,
1085022.8876545678, 571063.88765456, 606718.3876545678,
1053686.6, 971024.187656, 631193.398765456, 879431.1),
digits=3)
testData <- data.frame(num1=c(1:10, NA),
num2=c(NA, seq(from=1, to=5.5, by=0.5)),
num3=c(NA, num),
int1=c(as.integer(1:4), NA, as.integer(4:9)),
fac1=factor(c(NA, letters[1:9], "hjh")),
fac2=factor(c(letters[6:15], NA)),
cha1=c(letters[17:26], NA),
cha2=c(NA, "longer", letters[25:17]),
stringsAsFactors=FALSE)
levels(testData$fac1) <- c(levels(testData$fac1), "unusedLevel")
testData$Date <- as.Date("1900-1-1")
testData$Date[2] <- NA
testData$POSIXt <- as.POSIXct(strptime("1900-1-1 01:01:01",
format="%Y-%m-%d %H:%M:%S"))
testData$POSIXt[5] <- NA
## Output
## is tested with regular tests
## formatInfo
## Default output
formatInfoT <- data.frame(colname=c("num1", "num2"),
nlevels=c(0, 0),
position=c(1, 4),
width=c(2, 3),
digits=c(0, 1),
exp=c(0, 0),
stringsAsFactors=FALSE)
testData1 <- testData[, c("num1", "num2")]
testData1M <- as.matrix(testData1)
formatInfo <- write.fwf(testData1, formatInfo=TRUE)
checkEquals(formatInfo, formatInfoT)
formatInfoM <- write.fwf(testData1M, formatInfo=TRUE)
checkEquals(formatInfoM, formatInfoT)
## Scientific notation
dd <- options("digits"); options(digits = 7)
testData2 <- data.frame(a=123, b=pi, c=1e8, d=1e222)
formatInfo <- write.fwf(x=testData2, formatInfo=TRUE)
checkEquals(formatInfo$width, c(3, 8, 5, 6))
checkEquals(formatInfo$digits, c(0, 6, 0, 0))
checkEquals(formatInfo$exp, c(0, 0, 2, 3))
options(dd) ## reset old options
## 'na' can either decrease or increase the width
## --> values of int1 have width 1 and using na="" should not increase
## the width
formatInfo <- write.fwf(testData[, "int1", drop=FALSE], formatInfo=TRUE,
na="")
checkEquals(formatInfo$width, 1)
## --> values of int1 have width 1 and using na="1234" should increase
## the width to 4
formatInfo <- write.fwf(testData[, "int1", drop=FALSE], formatInfo=TRUE,
na="1234")
checkEquals(formatInfo$width, 4)
## rowCol
formatInfoTR <- data.frame(colname=c("row", "num1", "num2"),
nlevels=c(11, 0, 0),
position=c(1, 4, 7),
width=c(2, 2, 3),
digits=c(0, 0, 1),
exp=c(0, 0, 0),
stringsAsFactors=FALSE)
testData3 <- testData[, c("num1", "num2")]
testData3M <- as.matrix(testData3)
formatInfoR <- write.fwf(testData3, formatInfo=TRUE, rownames=TRUE,
rowCol="row")
checkEquals(formatInfoR, formatInfoTR)
formatInfoR <- write.fwf(testData3M, formatInfo=TRUE, rownames=TRUE,
rowCol="row")
checkEquals(formatInfoR, formatInfoTR)
## QuoteInfo alone does not have any effect
formatInfoI <- write.fwf(testData3, formatInfo=TRUE, quoteInfo=TRUE)
checkEquals(formatInfoI, formatInfoT)
formatInfoI <- write.fwf(testData3M, formatInfo=TRUE, quoteInfo=TRUE)
checkEquals(formatInfoI, formatInfoT)
## Quote
formatInfoTQ <- formatInfoT
formatInfoTQ$position <- c(1, 6)
formatInfoTQ$width <- c(4, 5)
formatInfoQ <- write.fwf(testData3, formatInfo=TRUE, quote=TRUE)
checkEquals(formatInfoQ, formatInfoTQ)
formatInfoQ <- write.fwf(testData3M, formatInfo=TRUE, quote=TRUE)
checkEquals(formatInfoQ, formatInfoTQ)
## Quote without quoteInfo
formatInfoTQI <- formatInfoT
formatInfoTQI$position <- c(2, 6)
formatInfoQI <- write.fwf(testData3, formatInfo=TRUE, quote=TRUE,
quoteInfo=FALSE)
checkEquals(formatInfoQI, formatInfoTQI)
formatInfoQI <- write.fwf(testData3M, formatInfo=TRUE, quote=TRUE,
quoteInfo=FALSE)
checkEquals(formatInfoQI, formatInfoTQI)
## Width
## --> default width for num1 is 2
testData4 <- testData[, "num1", drop=FALSE]
testData4M <- as.matrix(testData[, "num1", drop=FALSE])
formatInfo <- write.fwf(testData4, width=10, formatInfo=TRUE)
checkEquals(formatInfo$width, 10)
formatInfo <- write.fwf(testData4M, width=10, formatInfo=TRUE)
checkEquals(formatInfo$width, 10)
## Too small value in width (this also tests recycling)
## --> proper width for num1 is 2, while for num2 it is 3
checkException(write.fwf(testData[, c("num1", "num2")], width=2))
checkException(write.fwf(testData[, c("num1", "num2")], width=c(2, 1)))
## Done
cat("\nDONE.\n\n")
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.