Просто добавьте третий вариант:
require(doBy)
summaryBy(Frequency~Category, data=yourdataframe, FUN=sum)
EDIT: это очень старый ответ. Теперь я бы рекомендовал использовать group_by и суммировать из dplyr, как в ответе @docendo.
Если неуправляемый ресурс выпущен только на выходе приложения, Вы не должны даже волноваться с финализатором, так как процесс разгружается, должен иметь дело с этим для Вас так или иначе.
, Если у Вас есть несколько доменов приложения и Вы хотите иметь дело с доменом приложения, разгружаются, это - одна возможная проблема, но возможно один Вы не должны заботиться о.
я второй те, которые говорят, что этот дизайн является возможно не правильным поступком (и будет мешать фиксировать, впоследствии, Вы находите действительно фактическую необходимость в двух экземплярах), Создают объект (или ленивый интерфейсный объект загрузки) в точке входа и передают его через код туда, где необходимо, проясняя, кто ответственен за то, если это, для кого, затем Вы свободны изменить решение использовать только один с небольшим эффектом к остальной части кода (который использует то, что это дано)
Я сначала упомянул бы, что шаблоны Объектно-ориентированного проектирования и их последствия не всегда влияют на каждое решение языка, даже на Объектно-ориентированных языках. Можно, конечно, найти классические шаблоны разработки, которые легче реализовать на одном языке (Smalltalk) в противоположность другому (C++).
Однако я не уверен, что соглашаюсь с предпосылкой, что одноэлементный экземпляр должен только быть расположен в конце приложения. Ничто в описаниях шаблона разработки, которые я прочитал для Singleton (или Шаблоны разработки: Элементы допускающего повторное использование Объектно-ориентированного программного обеспечения ), упоминают это как свойство этого шаблона. Одиночный элемент должен гарантировать, что только один экземпляр класса существует в любой момент вовремя; это не подразумевает, что должно существовать столько, сколько приложение существует.
у меня есть чувство, что на практике, много одиночных элементов действительно существуют для большей части срока действия приложения. Однако рассмотрите заявление, которое использует соединение TCP для общения с сервером, но может также существовать в разъединенном режиме. При соединении Вы захотите, чтобы одиночный элемент поддержал информацию о соединении и состояние соединения. После того, как разъединенный, можно хотеть сохранить тот же самый одиночный элемент - или можно избавиться от одиночного элемента. В то время как некоторые могут утверждать, что имеет больше смысла сохранять одиночный элемент (и я могу даже быть среди них), нет ничего в самом шаблоне разработки, который устраняет Вас от избавления от него - если соединение переделано, одиночный элемент можно инстанцировать снова, поскольку никакой экземпляр его не существует в тот момент.
, Другими словами, можно создать сценарии, где логично для одиночных элементов иметь IDisposable.
Пока Ваш финализатор не называет методы (те, которые Располагают) на любых других управляемых объектах, необходимо быть в порядке. Просто помните, что порядок завершения не детерминирован. Таким образом, если Ваш одиночный элемент возражает, что Foo держит ссылку на панель объектов, которая требует распоряжения, Вы не можете надежно записать:
~Foo()
{
Bar.Dispose();
}
сборщик "мусора" уже, возможно, собрал Панель.
Рискуя тем, чтобы ступить в груду липкой вещи OO (т.е. запустить войну), одна альтернатива использованию одиночного элемента должна использовать статический класс.
В то время как это может получить Вас схватывания обзора кода и предупреждения FxCop, нет ничего внутренне неправильно с реализацией финализатора без IDisposable. Однако выполнение так на одиночном элементе не является надежным способом получить разрушение AppDomain или процесс.
Рискуя тем, чтобы дать субъективный совет дизайна: Если объект является действительно не сохраняющим состояние, сделайте его статическим классом. Если это с сохранением информации, вопрос, почему это - Singleton: Вы создаете изменяемую глобальную переменную. При попытке получить приложение близко, соглашение с ним, когда Ваш основной цикл выходит.
Применимость Singleton к какой-то конкретной ситуации в стороне,
я думаю, что нет ничего неправильно с Избавлением от Singleton. В сочетании с ленивым инстанцированием это просто означает выпуск ресурса, если Вы не нуждаетесь в нем временно и затем повторно получаете его по мере необходимости.