Ответ 1
Ширина предложения
Чтобы добиться "более широкого" вывода, вы можете изменить значение по умолчанию width
в R options
.
Согласно options {base}
help:
ширина:
управляет максимальным количеством столбцов в строке, используемой для печати векторов, матриц и массивов, а также при заполнении cat.
Here is an example:
# initial try
str(DF, list.len=ncol(DF), vec.len=20)
он дает:
'data.frame': 3 obs. of 2 variables:
$ AAA: num 1 2 3
$ BBB: POSIXlt, format: "2017-01-01 11:40:00" "2017-01-01 11:50:00" ...
Параметры предложения (ширина)
И теперь, с разными width
:
# retain default options
op <- options()
# set apropriate width
n_cols <- 22 * 20 # n columns for 20 POSIXlt strings
n_cols <- n_cols + 50 # 50 columns for column description
# actually you can use any sufficiently big number
# for example n_cols = 1000
options(width = n_cols)
str(DF, list.len=ncol(DF), vec.len=20)
options(op)
Результат:
'data.frame': 3 obs. of 2 variables:
$ AAA: num 1 2 3
$ BBB: POSIXlt, format: "2017-01-01 11:40:00" "2017-01-01 11:50:00" "2017-01-01 10:38:00"
Параметр ширины Roland
Похоже, вы можете достичь этого, а также с параметром width
в str
. Так же, как предложил Роланд. Но снова вам нужно предоставить достаточно большое значение для вывода. 1 Строка POSIXlt содержит 21 символ + пробел. Итак, для 20 строк вам нужно больше 440 столбцов.
Трехпараметрический подход
Я попробовал это с вашим примером:
DF <- rbind(DF, DF, DF) # nrows = 24
# Calculate string width
string_size <- nchar(as.character(DF[1, 2])) + 3 # string width + "" and \w
N <- 20 # number of items
n_cols <- string_size * N
str(DF, list.len=ncol(DF), vec.len=20, width = n_cols)
Вывод:
'data.frame': 24 obs. of 2 variables:
$ AAA: num 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
$ BBB: POSIXlt, format: "2017-01-01 11:40:00" "2017-01-01 11:50:00" "2017-01-01 10:38:00" "2017-01-01 11:40:00" "2017-01-01 11:50:00" "2017-01-01 10:38:00" "2017-01-01 11:40:00" "2017-01-01 11:50:00" "2017-01-01 10:38:00" "2017-01-01 11:40:00" "2017-01-01 11:50:00" "2017-01-01 10:38:00" "2017-01-01 11:40:00" "2017-01-01 11:50:00" "2017-01-01 10:38:00" "2017-01-01 11:40:00" "2017-01-01 11:50:00" "2017-01-01 10:38:00" "2017-01-01 11:40:00" "2017-01-01 11:50:00" ...
Существует ровно 20 строк POSIXlt.
Описание
Проблема с выходом возникает из метода utils:::str.POSIXt
, который вызывается для объекта POSIXlt. Интересная часть находится в следующей строке:
larg[["vec.len"]] <- min(larg[["vec.len"]], (larg[["width"]] -
nchar(larg[["indent.str"]]) - 31)%/%19)
Эта строка вычисляет количество строк POSIXlt в выводе. Грубо говоря, вывод будет состоять не более чем из vec.len
строк POSIXlt И длина вывода в символах будет не более width
.
Здесь larg
- это список аргументов, переданных в str
. По умолчанию они:
vec.len = 4
;
width = 80
;
indent.str = " "
.
Таким образом, рекоммутированный vec.len
по умолчанию будет равен 2.
Как в последнем примере, мы устанавливаем vec.len = 20
, width = 440
, а наш фрейм данных имеет 24 строки. Пересчитанный vec.length
равен 20. Таким образом, вывод str(DF)
содержит 20 строк POSIXlt и привязан к "...", что означает, что в векторе POSIXlt содержится более 20 элементов.