Что вы можете сделать с данными.кадр, который вы не можете С данные.стол?


Я только начал использовать R и наткнулся на данные.стол. Я нашел его блестящим.

очень наивный вопрос: Могу ли я игнорировать данные.фрейм для использования данных.таблица, чтобы избежать синтаксической путаницы между двумя пакетами?

1 63

1 ответ:

С данные.таблица часто задаваемых вопросов

FAQ 1.8 хорошо, я начинаю видеть, какие данные.таблица примерно, но почему вы не улучшили данные.рама в R? Почему это должен быть новый пакет?

как FAQ 1.1 основные моменты,j на [.data.table принципиально отличается от j на [.data.frame. Даже что-то такое простое, как DF[,1] нарушит существующий код во многих пакетах и пользовательский код. Это по дизайну, и мы хотим, чтобы он работал таким образом больше сложный синтаксис для работы. Есть и другие отличия (см. FAQ 2.17).

кроме того, data.table наследует от data.frame. Это data.frame тоже. А data.table может быть передан любой пакет, который принимает только data.frame и этот пакет можно использовать [.data.frame синтаксис на data.table.

мы также предложили улучшения для R, где это возможно. Один из они были приняты в качестве новой функции в R 2.12.0:

unique() и match() теперь быстрее на символьных векторах, где все элементы находятся в глобальном CHARSXP кэш и без опознавательных знаков кодирование (код ASCII). Спасибо Мэтью Доул за предложение улучшений к тому, как хэш-код генерируется в unique. c.

второе предложение было использовать memcpy на duplicate.c, что значительно быстрее, чем цикл for В C. Это улучшит способ копирования R данные внутри страны (по некоторым показателям в 13 раз). Нить на r-devel здесь : http://tolstoy.newcastle.edu.au/R/e10/devel/10/04/0148.html.

2.17 каковы меньшие синтаксические различия между данными.кадр и данные.стол?

  • DT[3] относится к 3-й строке, но DF[3] относится к 3-й столбец
  • DT[3,] == DT[3], но DF[,3] == DF[3] (немного смущаясь)
  • по этой причине мы говорим, что запятая необязательна в DT, но не необязательна в DF
  • DT[[3]] == DF[3] == DF[[3]]
  • DT[i,] где i-одно целое число, возвращает одну строку, как и DF[i,], но в отличие от матричного однорядного подмножества, которое возвращает a вектор.
  • DT[,j,with=FALSE] где j-одно целое число, возвращает данные одного столбца.таблица, в отличие от DF[,j] который возвращает вектор по умолчанию
  • DT[,"colA",with=FALSE][[1]] == DF[,"colA"].
  • DT[,colA] == DF[,"colA"]
  • DT[,list(colA)] == DF[,"colA",drop=FALSE]
  • DT[NA] возвращает 1 строку NA, но DF[NA] возвращает a копия ДФ, содержащий на всей территории.
  • символ NA тип логический в R, и поэтому перерабатывается [.data.frame. Намерение было вероятно DF[NA_integer_]. [.data.table делает это автоматически для удобства.
  • DT[c(TRUE,NA,FALSE)] трактует NA как ложь, но DF[c(TRUE,NA,FALSE)] возвращает NA строк
    для каждого NA
  • DT[ColA==ColB] проще DF[!is.na(ColA) & !is.na(ColB) & ColA==ColB,]
  • data.frame(list(1:2,"k",1:4)) создает 3 колонки, data.table создает один столбец списка.
  • check.names по умолчанию TRUE на data.frame но FALSE на data.table, для удобства.
  • stringsAsFactors по умолчанию TRUE в data.frame но ложь в data.table, для эффективности.
  • поскольку глобальный кэш строк был добавлен в R, элементы символов являются указателем на одну кэшированную строку, и больше нет a преимущество представления покрывать к фактору.
  • атомарные векторы в Столбцах списка сворачиваются при печати с использованием ", " в данных.рамка, но ", " в данных.таблица с конечной запятой после 6-й пункт, чтобы избежать случайной печати больших встроенных объектов.
  • на [.data.frame мы очень часто ставлю drop=FALSE. Когда мы забываем, ошибки могут возникнуть в крайних случаях, когда выбираются отдельные столбцы и все внезапно возвращается вектор, а не один столбец данные.рамка. В [.data.table мы воспользовались возможностью, чтобы сделать это последовательное и капли.
  • при данные.таблица передается в данные.таблица-не знают пакет, что пакет он не связан с любой из этих различий; он просто работает

маленький нюанс

возможно, будут случаи, когда некоторые пакеты используют код, который падает при задании данных.кадр, однако, учитывая, что data.table постоянно поддерживается, чтобы избежать таких проблем, любые проблемы, которые могут возникнуть будут исправлены в кратчайшие сроки.

например

  • base::unname(DT) теперь работает снова, как это необходимо plyr:: melt(). Благодаря Кристоф Якель за репортаж. Тест добавлен.
  • мере.данные.метод frame был добавлен для ITime, так что ITime может быть передан в ggplot2 без ошибок, #1713. Спасибо Фаррелу Бучинскому за репортаж. Добавлены тесты. Метки оси ITime являются по-прежнему отображается как целое число секунд от полуночи; мы не знаем, почему ggplot2 не вызывает ITime как.символьный метод. Преобразование ITime в POSIXct для ggplot2-это один из подходов.