Экспорт R в SAS с использованием иностранного: почему логические поля вызывают ошибку «Неверные данные для ...»? - PullRequest
1 голос
/ 16 сентября 2011

Я подозреваю, что это ошибка в библиотеке (иностранная), но я не уверен.

Когда я экспортирую фрейм данных, содержащий логический вектор с 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 за помощь.

1 Ответ

1 голос
/ 16 сентября 2011

Учитывая, что «логический» не указан среди классов, которые, как утверждается, должным образом экспортированы в SAS, вы вряд ли можете назвать это ошибкой.

?write.foreign
...