【问题标题】:Awk script in RR中的Awk脚本
【发布时间】:2012-01-31 06:12:32
【问题描述】:

我需要运行 awk 脚本来检测光谱中的局部最大值(峰值)。此光谱在文本文件中以两列的形式出现。

这是一个更大项目的一部分,该项目将确定这些峰是否代表某些化合物(实际上是代谢物)。

我在 Google 和无数其他地方搜索过,我真的找不到在 R 中运行 awk 脚本的任何东西。

编辑:我使用的 awk 脚本看起来像这样-

awk 'BEGIN{dydx = 0;}
{ 
  if(NR > 1)
     { dydx = ($2 - y0)/($1 - x0); } 
  if(NR > 2 && last * dydx < 0)
     { printf( "%.4f  %.4f\n", (x0 + $1)/2, log((dydx<0)?-dydx:dydx)); } ;
  last=dydx; x0=$1; y0=$2
}' /home/chaitanya/Work/nmr_spectra/caffeine/pdata/1/spectrumtext.txt  | awk '$2 > 17'

您还可以查看我昨天提出的this 问题。请注意,这不是同一个问题。

【问题讨论】:

  • @baptiste 不是同一个问题。不,我已经找到了解决昨天问题的方法。我正在努力让它发挥作用。我仍在寻找其他可能的解决方案。因此,请不要认为这是重复的,并且出于这个原因对这个或其他问题投反对票。
  • 不清楚您是否真的遵循了昨天的想法。如果您找到了解决方案,请将其添加到讨论中,并更好地解释您要解决的实际问题。
  • @baptiste 是对的(一如既往)。您应该始终保持透明。尽可能多地发布信息并链接到任何相关材料。
  • @baptiste 我改变了这两个问题。请看一看。我认为他们现在很清楚。

标签: r awk


【解决方案1】:

你应该可以的

system('your awk command here')

如果您的 awk 命令中有单引号,请按照 Hong Ooi 的建议执行并将您的 awk 命令放在单独的文件中,然后从 system 命令运行它或转义单引号:

> system('echo \'hello guy!\' ')
hello guy!

【讨论】:

  • 那行不通。我的 awk 脚本使用 " 和 '。因此它与 system(' ') 命令中使用的引号冲突。我已编辑问题以包含 awk 脚本。
  • @guy:您将 awk 脚本的文件名放在了 system() 调用中。
  • 我同意@HongOoi。我编辑了答案以纳入 HongOoi 的建议。
  • 哦,是的!我忘了我可以逃脱角色。
【解决方案2】:

Windows 10 用户的更新现在可以本地使用 AWK:

对于安装了 WSL(适用于 linux 的 windows 子系统)的 Windows 10 用户,您可以从 R 控制台在 windows 中运行 AWK:

>  system( 'wsl awk \'BEGIN { print "Hello, world" }\' ')
Hello, world

【讨论】:

    【解决方案3】:

    如果您有相当平滑的光谱数据,那么有几个函数可以很好地定位局部最大值和最小值(又名“峰值”)。我喜欢 pastecs 中的工具,但请查看以下软件包(按我的粗略选择顺序):

    pastecs,
    Peaks,
    seewave,
    ppc

    【讨论】:

    • 很有趣,感谢您的列表。我只使用过 PRocess 和自定义函数,我应该检查一下。
    猜你喜欢
    • 2021-11-11
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    相关资源
    最近更新 更多