2014-05-23 7 views
1

В сценарии Terminal/shell вы можете перечислить все файлы в текущем каталоге с помощью ls -l, а затем передать его для выполнения дополнительной команды. Например, ls -l | grep -i "calc" возвращает все файлы, имя файла которых содержит calc. В R вы можете перечислить все объекты, хранящиеся в настоящее время в рабочей области, с помощью команды ls().Можно ли сузить результат, возвращаемый ls(), с помощью grep в R, как `ls -l | Команда grep` в UNIX?

Тем не менее, я хочу сузить список, возвращенный ls() с чем-то вроде функции grep в R, где вход является возвращенным списком ls(), а выход - это список, суженный grep (или что-то еще), как и в случае с трубкой UNIX, о которой я упоминал выше. Возможно ли это сделать в R?

Кроме того, возможно ли сузить список по xargs-подобной функциональности в R? Поэтому мне нравится получать только объекты, на которых литерал включает if, так что если функция в списке, возвращаемом ls(), включает внутри нее условие if-else, я хочу отобразить функцию в консоли. Вы можете сделать это в терминале с find . | xargs grep "if" (конечно, это файлы в текущем каталоге, а не объект R в рабочей области, но я показал его только для иллюстрации).

Обратите внимание, что это не сообщение о том, как вызвать команды оболочки из R. Это не то, что я хочу сделать.

Я использую OS X 10.9.3 и R 3.1.0.

+0

Что вы спрашиваете? 'R' имеет команды' grep'. Скомпилированные функции не будут содержать текстовую строку 'if'. –

+0

Что вы пытаетесь сделать? R имеет свой метод для анализа и фильтрации текстов. Может быть, вам нужно потратить время, чтобы научиться R-способу делать что-то, чем пытаться применить что-то, что не будет очень эффективным. – agstudy

ответ

2

ls() имеет pattern параметр, который может быть то, что вам нужно:

pattern an optional regular expression. Only names matching pattern 
      are returned. glob2rx can be used to convert wildcard patterns 
      to regular expressions. 

Для второй части вашего вопроса, вы могли бы использовать capture.output(getAnywhere()) и grep смотреть внутрь источника функции. Вам нужно будет передать функции на это, и я сделаю всю эту операцию функцией, чтобы сохранить реализацию чистой.

+0

Спасибо. Как насчет операции, похожей на xargs? – Blaszard

+0

только что обновлено с возможностью. – hrbrmstr

+0

Я не уверен, что это то, что я хочу получить. 'getAnywhere (" if ")' возвращает только встроенную функцию 'if', но я хочу получить все объекты, которые используют' if' внутри. – Blaszard

1

Вы можете сделать

grep("calc",list.files(),value=TRUE) 

, который должен "подражать" ls -l | grep -i "calc". См. ?list.files и grep.

+0

Не очень хороший пример. лучше 'list.files (pattern = 'calc')'. – agstudy

+0

@agstudy: Я полностью согласен с примером 'list.files(). Тем не менее, похоже, что OP мог бы узнать, что в G вообще узнает о 'grep()' в R. –

Смежные вопросы