Я подозреваю, что это ошибка в библиотеке (иностранная), но я не уверен.
Когда я экспортирую фрейм данных, содержащий логический вектор с write.foreign, полученный файл SASDATA вызывает ошибку при импорте SAS.
Пример:
df = data.frame(id = c(1,2,3), boolean = c(TRUE,FALSE,TRUE))
library(foreign)
write.foreign(df, "test.sasdata", "test.sas",
"SAS", dataname="WORK.TEST", validvarname="V7")
Содержимое test.sasdata:
1,TRUE
2,FALSE
3,TRUE
Вывод из SAS при запуске «test.sas»:
NOTE: Invalid data for boolean in line 1 3-6
RULE: ----+----1--...
1 1,TRUE 6
id=1 boolean=. _ERROR_=1 _N_=1
... (errors for remaining rows)
Обходной путь должен сделать:
df$boolean <- as.numeric(df$boolean)
перед экспортом.Или, в более общем смысле:
logicals <- sapply(df, is.logical)
if (any(logicals))
df[logicals] <- lapply(df[logicals], as.numeric)
Что-то не так с write.foreign?Или это ошибка?
РЕДАКТИРОВАТЬ: Пересмотренный код выше, чтобы использовать sapply / lapply, как writeForeignSAS.Я представил патч для writeForeignSAS , который включает в себя все вышеперечисленное.
Спасибо DWin за помощь.