Недавно я обнаружил, что я работаю с R-кодом, который находится по всей карте с точки зрения стиля кодирования - несколько авторов и отдельных авторов, которые не являются строгими в отношении к единственной структуре. Есть определенные задачи, которые я бы хотел автоматизировать лучше, чем я сейчас делаю.R языковой код для переформатирования/рефакторинга?
Я ищу инструмент (или инструменты), который управляет следующими задачами, перечисленными в порядке возрастания желания, но также в несколько возрастающем порядке скептицизма существования.
Основное форматирование. Такие вещи, как преобразование «if (foo)» в «if (foo)» и достижение единообразия в терминах расположения скобок и тому подобное.
Преобразование "foo $ blah" в "foo [[" blah "]]" для доступа к списку. В идеале он мог бы хотя бы сделать предположение, если объект действительно был списком, а не data.frame и только конвертирует списки.
Преобразование '=' в '< -'. Да, это простой поиск и замена - но не совсем. Инструмент (или регулярное выражение) должен знать язык таким образом, что он знает, чтобы преобразовать «x = 5», но не «foo (x = 5)». Также было бы очень приятно не просто заменить символ, но также обеспечить единое пробелы по обе стороны от оператора присваивания.
Переменное переименование, особенно по функциям &. Например, предположим, что в списке есть элемент «foo», мне бы хотелось изменить его до «foobar» один раз и не нужно отслеживать каждое использование этого списка во всем потоке кода. Я предполагаю, что это потребует, чтобы инструмент мог управлять потоком управления, чтобы идентифицировать такие вещи, как этот список, существующий как другое имя в другой функции.
Соглашения об именовании. Я хотел бы иметь возможность определить какое-либо стандартное соглашение об именах (например, Google's или что-то еще) и определить ли он все функции, переменные и т. Д. И преобразовать их. Обратите внимание, что это связано с предыдущей записью для таких элементов, как элементы списка.
Вы можете перечислить основные команды обработки UNIX (например, SED) до тех пор, как это будет на самом деле быть достаточно умны, чтобы по крайней мере, как правило, не винт вещи (например, преобразование «Foo (х = 5)» до " foo (x < -5) ").
Я предполагаю, что если бы такой инструмент уже существовал в идеальном состоянии, о котором я уже слышал об этом, и я также понимаю, что с таким языком, как R, трудно сделать некоторые из этих видов изменений автоматически, но можно мечтать, правильно? У кого-нибудь есть указатели на некоторые из них?
переформатирования обсуждалось здесь: http://stackoverflow.com/questions/5117359/any-r-style-guide-checker –
IIRC 'formatR' это один пакет, который очищает R и охватывает несколько пунктов в вашем списке. – baptiste
Вторая цель может быть немного грязной: data.frame возвращает TRUE для 'is.list()'. Вы можете попробовать что-то вроде 'is.list (myObject) & (! Is.data.frame (myObject))'. – Iterator