Что делает аргумент by в ffbase::as.character?

В сообщении ниже,

агрегация с использованием функции ffdfdply в R

Есть такая строчка.

splitby <- as.character(data$Date, by = 250000)

Просто из любопытства интересно, что означает аргумент by. Кажется, это связано с ff dataframe, но я не уверен. Поиск Google и документация R as.character и as.vector не предоставили никакой полезной информации.

Я попробовал несколько примеров, но приведенные ниже коды дают те же результаты.

d <- seq.Date(Sys.Date(), Sys.Date()+10000, by = "day")
as.character(d, by=1)
as.character(d, by=10)
as.character(d, by=100)

Если бы кто-нибудь мог сказать мне, что это такое, я был бы признателен. Заранее спасибо.


person dixhom    schedule 27.06.2015    source источник


Ответы (2)


Поскольку as.character.ff работает с использованием as.character по умолчанию внутри, и ввиду того факта, что векторы df могут быть больше, чем ОЗУ, данные необходимо обрабатывать фрагментами. Разбиение на куски облегчает функция chunk. В этом случае соответствующий метод — chunk.ff_vector. По умолчанию размер фрагмента вычисляется путем деления getOption("ffbatchbytes") на размер записи. Однако это поведение можно переопределить, указав размер фрагмента с помощью by.

В приведенном вами примере вектор ff будет преобразован в character 250000 участников за раз.

Конечный результат будет одинаковым для любого by или вообще без by. Большие значения приведут к большему временному использованию ОЗУ, но, возможно, к более быстрой работе.

person Nick Kennedy    schedule 27.06.2015

Во-первых, это функция ffbase::as.character, а не старая добрая base::as.character.

См. http://www.inside-r.org/packages/cran/ffbase/docs/as.character.ff, в котором говорится

as.character((x, ...))

Arguments:
x: a ff vector
...: other parameters passed on to chunk

Итак, аргумент by передается какой-то функции chunk. Затем вам нужно выяснить, какая функция chunk пакета используется. Введите ?chunk, сообщите нам, какой из них, затем прочитайте его документ, чтобы узнать, что делает его аргумент by.

person smci    schedule 27.06.2015
comment
by передается в «chunk.default», поэтому документация для него в ?chunk максимально точна: by: increment of the sequence (используется как в ?seq). - person SimonG; 27.06.2015
comment
Потом просто игнорируют. В R все неизвестные или неиспользуемые аргументы молча игнорируются. Возможно, это была опечатка оригинального плаката, например. от копирования команды seq(...). - person smci; 27.06.2015
comment
Я не думаю, что это игнорируется. И chunk.ff_vector, и chunk.ffdf захватывают ... и передают его chunk.default через do.call. Если указано by, то его будет использовать chunk.default (как предполагает документация, аналогично тому, как его использует seq). - person SimonG; 27.06.2015
comment
Хорошо, но я не могу найти страницу документации для ffbase::chunk.default , они могли бы добавить ее... - person smci; 28.06.2015
comment
Документация для этой функции (as.character.ff) не особенно полезна в этом отношении. Ни ваш ответ, ни ответ @smci на самом деле не объясняют, каков конечный результат изменения by в этом случае. Чтобы действительно понять, что она делает, мне пришлось просмотреть код этой функции, а также код двух методов chunk! - person Nick Kennedy; 28.06.2015
comment
@NickK да, я не смог найти источник ffbase::chunk.default, я никогда им не пользовался и не собирался устанавливать еще один пакет только для того, чтобы ответить на этот вопрос. Действительно, кому-то нужно добавить недостающие страницы документа для этого пакета. Обычная история в пакетах R ... Я указал ОП на то, как решить ее для себя. - person smci; 28.06.2015
comment
@smci полностью согласен с тем, что проблема в документации! Соответствующая функция находится в пакете bit. Проблема в том, что даже с документацией для этого пакета неясно, что делает передача by в chunk.ff_vector, поскольку это не упоминается на странице справки. Также ?chunk не дает полного ответа, потому что вызывается метод ff_vector, а не default (хотя он, в свою очередь, вызывает chunk.default!) - person Nick Kennedy; 28.06.2015
comment
ffbase::chunk.default не существует, потому что chunk.default находится в base. - person SimonG; 28.06.2015
comment
@SimonG нет, это конкретно не так, вот в чем проблема ОП. Они находятся в bit::chunk и bit::chunk.default. Очевидно, что пакет bit является зависимостью от пакета ffbase, который импортируется. Как я уже сказал, есть также base::chunk, и это не то, что здесь вызывается. - person smci; 28.06.2015