2015-07-23 3 views
0

Я пытался найти в документации для функции rbind.data.frame, чтобы понять, что следующий вызов finction делает (находится в https://stackoverflow.com/a/4227483/3999893):Где документация для `rbind.data.frame`

rbind.data.frame(list(a=1, b=2), list(a=3, b=5), list(a=5, b=15)) 

Но используя ?rbind.data.frame дал непрозрачную помощь для rbind.

Есть rbind.data.frame какой-либо метод-chanining, или просто нет документов для этого метода?

+1

Это в '? Rownames'. См. Http://stackoverflow.com/questions/5524140/rbind-in-r-gives-a-weird-rowname –

+1

Верьте или нет, это дубликат [this SO post] (http: // stackoverflow. ком/вопросы/5524140/rbind-в-р-дает-а-Weird-rowname).В основном, ваши списки генерируют гипотетические имена строк '2, 2 и 3'. R требует, чтобы все имена строк были уникальными, поэтому он меняет второй на «21». –

+4

Вы вызываете 'rbind.data.frame' на * не data.frame * ... явно вызывающий метод на объект, который он не отправляет, не является хорошей практикой. Это особенно плохо, когда вы вызываете метод объекта, из которого наследуется класс метода. –

ответ

1

rbind является общей функцией, rbind.data.frame - это версия этой функции, которая применяется к кадрам данных.

Если вы делаете rbind на кадре данных, вы будете делать rbind.data.frame.

Предположительно разные объекты могут иметь разные применимые к ним функции rbind.

Дополнительная информация:

http://www.burns-stat.com/pages/Tutor/R_inferno.pdf - Посмотрите в начале главы 7

Я думаю причина вы видите только помощь для rbind что rbind реализуется в настоящее время только для кадров данных в базе R так rbind == rbind.data.frame.

+0

'rbind.data.frame' в настоящее время реализован метод S3 * в базе *, я думаю, что есть пакеты, которые имеют методы' rbind' для ggplots и других объектов. – Gregor

+0

да, действительно, это то, что я имел в виду, - я отредактирую свой ответ. –

3

rbind универсален, но это не имеет никакого rbind.default метода, который появляется при вводе:

methods(rbind) 

Вместо этого, когда вы набираете rbind в консоли вы увидите:

function (..., deparse.level = 1) 
.Internal(rbind(deparse.level, ...)) 
<bytecode: 0x100e55f20> 
<environment: namespace:base> 

Так что неверно, что rbind реализован только для данных в pkg: base. Вместо этого будет вызов .Internal(rbind(deparse.level, ...). Логика функции .Internal(rbind(..)) затем вытесняет обычную логику S3, чтобы она могла проверить, являются ли какие-либо элементы в списке аргументов data.frames. Если нет, то он продолжает обрабатывать атомные векторы и матрицы. Например, на моей машине в данный момент я вижу 4 методы, перечисленные:

methods(rbind) 
[1] rbind.data.frame rbind.matrix.csr rbind.Predict* 
[4] rbind.zoo* 

Это также неточным сказать rbind.data.frame относится только к dataframes. Более точным будет использование языка во втором предложении раздела «Подробности» в ?rbind. И на самом деле прочитать остальную страницу справки, которую Джошуа напомнил нам всем, чтобы читать.

Отсутствие rbind.default является отходом от обычного метода обработки общих функций S3. Большинство S3-дженериков, которые я изучил, имели методы *.default. Некоторые, например, plot.default, даже имеют свои страницы помощи.

И, наконец, я не имею ни малейшего понятия, почему розовые имена выглядят так, как они делают в исходном вопросе.

+1

И 'rbind', и' cbind' имеют другую семантику отправки метода, чем большинство общих функций. Это значит, что они могут проверять класс (ы) всех аргументов перед отправкой. См. Раздел * Отправка * раздела '? Rbind'. –

+0

Это имеет смысл. Мне следовало прокручивать страницу справки (как всегда). –