Подтвердить что ты не робот

C для R-программистов - рекомендуемые ресурсы/подходы после прошлых основ

Я бы хотел улучшить свои навыки C, чтобы быть более компетентными в преобразовании R-кода в C, где это было бы полезно. Какие намеки есть у людей, которые помогут мне на моем пути?

Справочная информация. Я несколько недель назад следил за онлайн-курсом Intro to C и что плюс Написание R-расширений и S Programming (Venables и Ripley) позволили мне преобразовать узкое место операции с C, например вычисляя произведение подматриц (я заново изобрел колесо там?). Однако я хотел бы пойти немного дальше этого, например. преобразование больших фрагментов кода, использование подпрограмм линейной алгебры и т.д.

Без сомнения, у меня есть больше возможностей учиться из ресурсов, которые я использовал раньше, но я задавался вопросом, есть ли другие, которые рекомендуют люди? Работа с примерами, очевидно, является одним из способов узнать больше: Брайан Рипли привел несколько примеров перехода от S прототипов к S + C в этом семинаре на Эффективное программирование на S и более поздний семинар Bioconductor Advanced R для биоинформатики (извините, не может размещать гиперссылку) включает в себя лабораторию по написанию алгоритма R + C. Более того, или другие предложения будут оценены.

4b9b3361

Ответ 1

Я тоже боролся с этой проблемой.

Если проблема заключается в том, чтобы улучшить команду C, есть много списков книг по этому вопросу. Все они начинаются с K & R. Мне понравилось "Программирование программистов-программистов" П. ван дер Линдена и "C-праймер" С. Прата. Любая ссылка на стандартную библиотеку C работает.

Если проблема связана с интерфейсом C с R, другим, кроме вышеупомянутого официального документа R, вы можете проверить этот курс Гарварда, и это краткое руководство по началу работы. Я передал только скалярные массивы и массивы в C, и честно не знал, как взаимодействовать с сложными структурами данных.

Если проблема связана с интерфейсом С++ с R или с навыками С++, я не могу ответить, так как я не использую много С++. Хорошей отправной точкой для меня был "С++ Core Language" (O'Reilly). Очень простой, примитивный, но полезный для людей, приезжающих с C.

Ответ 2

Это очень интересный вопрос. Как бы то ни было, я изучил C и С++ перед тем, как перейти к R, чтобы, возможно, мне стало проще добавлять C/С++ в R.

Но даже с этим я был бы первым, кто сказал бы, что добавление чистого C в R адски усложняется из-за разных макросов и R-внутренних элементов на уровне C, которые вам нужно изучить.

Это приводит меня к моему любимому аргументу: используйте дополнительный слой абстракции, например Rcpp. Он скрывает много неприятных деталей. И я надеюсь, что вам не нужно знать много С++, чтобы использовать его. Одним из примеров использования пакета является небольшой пакет earthmovdist на R-Forge, который использует Rcpp классы-оболочки для взаимодействия с одной конкретной метрикой.

Изменить 1: Например, см. главная функция earthmovdist здесь, которая, надеюсь, будет достаточно проста для чтения, возможно, с ) Rcpp руководство по пакетам классов оболочки в одна сторона.

Изменить 2: Три быстрых причины, по которым я считаю С++ более подходящим и R-одинаковым:

  • с помощью Rcpp классы-оболочки означают, что вы никогда должны использовать PROTECT и UNPROTECT, что является частым источником ошибок и кучи коррупция, если не отображается

  • используя Rcpp и с контейнерами STL, такими как vector и т.д., вам не нужно явно вызывать malloc()/free() или new/delete, который удаляет еще один частой источник ошибки.

  • Rcpp позволяет обернуть все в блоках try/catch на уровне С++ и сообщает исключение обратно в R --- поэтому никаких внезапных seg.faults и смертей программы.

Тем не менее, выбор языка - это очень личное решение, и многие пользователи, конечно же, прекрасно довольны интерфейсом более низкого уровня между C и R.

Ответ 3

Моя основная рекомендация - посмотреть на другие пакеты. Излишне говорить, что все пакеты не используют код C, поэтому вам нужно будет найти примеры, которые это делают. Вы можете загрузить исходный код для всех пакетов с CRAN, а в некоторых случаях вы также можете просматривать их на R-Forge. Некоторые проекты R также поддерживаются в Google Code или на сайтах, таких как github (например, ggplot2). Вы найдете код C в каталоге "src".

В общем, подумайте о том, чего вы пытаетесь выполнить, а затем посмотрите на пакеты, которые делают подобные вещи.

Книга "C Programming Language", вероятно, по-прежнему наиболее широко используется, поэтому вы можете захотеть получить ее на своей книжной полке. Следующая бесплатная книга также является полезным ресурсом: http://publications.gbdirect.co.uk/c_book/

Ответ 4

"Какая лучшая книга для изучения C?" perenial fooobar.com/questions/158/... question. (Средняя ссылка, вероятно, самая лучшая.)

Что касается R-специфических способов обучения C, я нашел поучительным загрузить исходный код R и взглянуть на некоторые. Внутренний код.

EDIT: Кто-то еще спросил "Что читать после K & R?"

Ответ 5

Если ваша цель - использовать C, чтобы избавиться от узких мест, вам понадобится хорошая цифровая библиотека в C. Есть много, но я нашел gsl (GNU Scientific Library) довольно полезной.

http://www.gnu.org/software/gsl/

Существует также классическая книга "Численные рецепты на языке C", которая содержит обзор важных численных методов (хотя я не рекомендую использовать их код дословно).