如何在R中执行已加载包的静态计数?

问题描述 投票:1回答:1

我想搜索目录结构以计算加载各种R软件包的次数。源包含在.org和.R文件中。我愿意假设“ library(”是我关心的任何行上的第一个非空白条目,并且我愿意假设每行最多只有一个这样的调用。

 find . -regex ".*/.*\.org" -print 

获取我的.org文件列表,然后

find . -regex ".*\.\(org\|R\)$" -print 

为我提供了.org和.R文件的列表(由于[C​​0])。

给出一个特定的文件,

https://unix.stackexchange.com/questions/15308/how-to-use-find-command-to-search-for-multiple-extensions

获取包装名称。我想将它们连接在一起,然后可能将输出重定向到一个文件,我可以从中使用R来计算频率。

貌似简单

grep -h "library(" file | sed 's/library(//' | sed 's/)//'

无效;我得到

find . -regex ".*/.*\.org" -print | xargs -0 grep -h "library("  | sed 's/library(//' | sed 's/)//'

而且我不确定下一步该怎么做。

我也尝试过

 find . -regex ".*/.*\.org" -print | xargs -0 grep -h "library("  |   sed 's/library(//' | sed 's/)//'
Usage: /usr/bin/grep [OPTION]... PATTERN [FILE]...
Try '/usr/bin/grep --help' for more information.

并且得到

find . -regex ".*/.*\.org" -exec grep -h "library(" "{}" "\;"

似乎很简单。我想念什么?

更新:在上面的xargs中添加-t将向我显示第一个命令:

find . -regex ".*/.*\.org" -exec grep -h "library(" "{}" "\;"
find: missing argument to `-exec'

大概后面是所有具有相对于PWD的路径的匹配文件的列表。实际上,如果我仅搜索.org文件,则该方法有效;如果我也添加.R文件,则会得到“ xargs:参数行太长”。我认为这意味着xargs将整个文件列表作为参数传递给grep的一次调用。

r org-mode xargs
1个回答
0
投票

grep -h library ./dirname/filename.org OK

find ... -print | xargs OK

find ... -print0 | xargs -0损坏

[find ... -print0 | xargs损坏(用过的地方)]

也请不要:

find ... -print | xargs -0

更快时:

grep -h "library(" | sed 's/library(//' | sed 's/)//'

这甚至更快,而且更有趣:

grep -h "library(" | sed -e 's/library(//' -e 's/)//'

© www.soinside.com 2019 - 2024. All rights reserved.