#r
#r
Вопрос:
Я хочу использовать xtable для отображения простого фрейма данных, содержащего два вектора с логическими значениями:
ia = c(TRUE, TRUE, FALSE)
ib = c(FALSE, TRUE, TRUE)
i.df = data.frame(ia, ib)
xtable(i.df)
Это приводит к:
begin{table}[ht]
begin{center}
begin{tabular}{rll}
hline
amp; ia amp; ib
hline
1 amp; c(TRUE, TRUE, FALSE) amp; c(FALSE, TRUE, TRUE)
2 amp; c(FALSE, TRUE, TRUE) amp; c(TRUE, TRUE, FALSE)
3 amp; c(TRUE, TRUE, FALSE) amp; c(FALSE, TRUE, TRUE)
hline
end{tabular}
end{center}
end{table}
Однако я бы ожидал:
begin{table}[ht]
begin{center}
begin{tabular}{rll}
hline
amp; ia amp; ib
hline
1 amp; TRUE amp; FALSE
2 amp; TRUE amp; TRUE
3 amp; FALSE amp; FALSE
hline
end{tabular}
end{center}
end{table}
По какой-то причине xtable печатает полные логические векторы в каждой строке, вместо того, чтобы печатать только один элемент в строке. Имеет ли это смысл для кого-либо или я упускаю из виду что-то явно очевидное?
Ответ №1:
Для меня это похоже на ошибку. Соответствующие строки в xtable.data.frame
:
logicals <- unlist(lapply(x, is.logical))
x[, logicals] <- as.character(x[, logicals])
Это не то, как я бы сделал это принуждение к символу. Я бы, вероятно, сделал что-то вроде:
x[,logicals] <- lapply(x[,logicals],as.character)
Я бы подумал о том, чтобы связаться с автором пакета. В то же время, вы можете попробовать преобразовать логические столбцы в символы заранее, самостоятельно, так как это, скорее всего, решит проблему за это время.
Редактировать
Комментарий Романа ниже предупредил меня о том, что предложенное мной исправление не будет работать, если есть только один логический столбец, поскольку измерения по умолчанию отбрасываются. Это должно было быть:
x[,logicals] <- lapply(x[,logicals,drop = FALSE],as.character)
Я связался с сопровождающим пакета по этому поводу (2012-04-22).
Комментарии:
1. Большое спасибо! Преобразование в символы с помощью
i.df$ia = as.character(i.df$ia)
отлично работает как обходной путь. Я также отправил электронное письмо автору пакета.