【问题标题】:Extract specific text lines from R output从 R 输出中提取特定的文本行
【发布时间】:2016-12-28 18:10:43
【问题描述】:

我正在尝试从从 R 函数包获得的结果中提取特定信息。我只熟悉 Python,所以学习 R 语言让我有些困惑。

假设这是 appnn 的输出(打印后),这是一个预测蛋白质聚集的包

Prediction: 
$sequence
[1] "IFYFYGTTY"

$overall
[1] 1.076839

$aminoacids
          [,1]
 [1,] 1.076839
 [2,] 1.076839
 [3,] 1.076839
 [4,] 1.076839
 [5,] 1.076839
 [6,] 1.076839
 [7,] 1.028888
 [8,] 1.011057
 [9,] 1.011057

$hotspots
$hotspots[[1]]
[1] 1 9

现在我只需要读取最后 2 个数字(1 和 9),然后我必须从中提取由这些数字确定的给定字符串的一部分(在这种情况下,它是整个字符串,因为它的长度从点 1 到 9)。

在 python 中它相当简单,但我不知道如何用 R 来做。 非常感谢。

【问题讨论】:

  • substr(Prediction$sequence, Prediction$hotspots[[1]][1], Prediction$hotspots[[1]][2])
  • appnn 是您从某处创建的 R 对象还是 Prediction 是 R 对象?这是从哪里来的?
  • 无论你的对象是什么,都可能有一个提取器函数,所以如果那是你的对象,它可能就像hotspots(appnn) 一样简单。阅读创建它的函数的文档 (help(functionname))

标签: r text


【解决方案1】:

这是一个可重现的示例。我猜你正在使用 appnn 包并创建一个名为 predictions 的对象,如下例所示:

library(appnn)
sequences <- c('STVIIE','KKSSTT','KYSTVI')
predictions <- appnn(sequences)

现在文档对​​返回值有什么说法:

 Value

 A list containing the amyloidogenicity propensity predictions for the
 polypeptides queried.

   overall
     The overall amyloidogenicity propensity prediction value for the sequence

   aminoacids
     The amyloidogenicity propensity prediction value per amino acid 

   hotspots
     A list of the amyloidogenic hotspots predicted in the sequence, limited by the first and last amino acid

所以在这里我查询了三个序列,所以我得到了一个包含三个元素的 R 列表。我可以通过选择结果的元素来获得每个结果,这里是第一个:

> predictions[[1]]
$sequence
[1] "STVIIE"

$overall
[1] 0.9497568

$aminoacids
          [,1]
[1,] 0.9497568
[2,] 0.9497568
[3,] 0.9497568
[4,] 0.9497568
[5,] 0.9497568
[6,] 0.9497568

$hotspots
$hotspots[[1]]
[1] 1 6

这是另一个包含命名组件的列表。热点组件本身就是一个只有一个组件的列表,(也许因为结果可能是一个序列的多个热点)所以我可以这样得到它:

> predictions[[1]]$hotspots[[1]]
[1] 1 6

返回一个长度为 2 的 R 向量(向量和列表在 R 中略有不同),值分别为 1 和 6。

【讨论】:

  • 太棒了!我试过你的和 joel.wilson 的,效果很好。但是,如果序列不返回 $hotspots[[1]],则会出现另一个问题。以 'KKSSTT' 为例,$hotspots[[1]] 只是作为无法提取的 'list()' 返回。有没有办法处理它,因为我计划自动迭代很多序列。
  • 这是一个空列表,所以你可以先测试$hotspots的长度是否大于0。
  • 谢谢,它有效。我正在编写一个函数,在计算后将给定的字符串写入文本文件。
  • 好的,但它 不是 一个字符串,它是一个长度为 2 的向量,就像 python 中的列表:[1, 6](但从 R 中的 1 开始索引,不像 python 中的 0) .
  • 再次感谢伙计。我完成了 if 语句,它将向量的值写入文本文件,现在我正在编写函数。我希望应该不是什么大问题。现在我正在尝试读取一个存储多个字符串的文本文件。它看起来像这样: Line#1: string Line#2: string... 一大堆我不敢数的字符串:P 我应该阅读文本文件,将所有这些字符串分配给一个列表,然后迭代通过所有这些?还是我直接从文本文件中读取每一行然后进行计算,返回向量再写入输出?
猜你喜欢
  • 1970-01-01
  • 2021-02-17
  • 2022-01-13
  • 1970-01-01
  • 2019-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多