[R] Bug report for package foreign anf functon write.foreign
Julien JOLY
ju||en@jo|y @end|ng |rom |n@erm@|r
Thu Jun 6 10:45:20 CEST 2024
Dear all,
First of all, I thank you for the creation of the package.
I write this message concerning the write.foreign() function from the foreign package and a bug that I discovered.
When we want to save our dataset as a .sas file, the limit of variable names character is 8 by default. In SAS this limit is 32 character and an argument in the function, validvarname, can theorically switch the default from 8 to 32 by selecting validvarname = "V7".
However, it did not work and show the error "Cannot uniquely abbreviate format names to conform to eight-character limit and not ending in a digit" that show the limit is still 8 characters.
By looking at the script at https://github.com/cran/foreign/blob/master/R/writeForeignSAS.R , I realized that the line 39, in the function make.SAS.formats, can be the reason of the nonfunctioning argument :
"if(any(nchar(x) > 8L) || any(duplicated(x)))" which is correct if the length of the variable has a limit of 8, but it does not take in consideration when the limit is at 32 defined by validvarnames = "V7".
A solution can be to add the argument validvarname in the definition of the function and add these few lines :
validvarname <- match.arg(validvarname)
nmax <- if(validvarname == "V7") 32L else 8L
if(any(nchar(x) > nmax) || any(duplicated(x)))
I hope I send the message to the good place and that it will help you improve the package.
Kind regards,
Julien Joly
Biostatisticien et Data manager
[[alternative HTML version deleted]]
More information about the R-help
mailing list