我们知道在R里面颠倒一个向量用rev函数,但是这个函数貌似对字符串不起作用。

那么今天小编就来跟大家一起掰次掰次如何在R里面reverse一个字符串。那么颠倒一个字符串究竟有什么用呢?除了酷炫以外。当然是有用的,例如我们手上如果有一个DNA序列,我们如何去获取它的反向互补序列。今天我们先来解决反向的问题,下一次我们在来解决互补的问题。下面给大家介绍5种不同的方法。
假如现在我们手上有这么一条DNA序列,我们需要取它的反向序列
dna='ATTTAGCGATGCGGCTATGCTATCGGA'
方法1. strsplit分割成字符串向量,rev之后再合并起来
我们用proc.time()来计算以下每种方法所用的时间
start <- proc.time()
splits <- strsplit(dna, "")[[1]]
reversed <- rev(splits)
final_result <- paste(reversed, collapse = "")
final_result
end <- proc.time()
print(end - start)

方法2. 使用R内置的utf8ToInt函数将字符串转换成一个整数的数值向量,rev之后再转换成字符串
start <- proc.time()
final_result <- intToUtf8(rev(utf8ToInt(dna)))
final_result
end <- proc.time()
print(end - start)

方法3. 使用stringi包
library(stringi)
start <- proc.time()
final_result <- stri_reverse(dna)
final_result
end <- proc.time()
print(end - start)

方法4. 使用IRanges包
library(IRanges)
start <- proc.time()
final_result <- IRanges::reverse(dna)
final_result
end <- proc.time()
print(end - start)

方法5. 使用Biostrings包
我们前面在讲☞R如何将fasta转成dataframe的时候就使用过Biostrings这个R包。
library(Biostrings)
start <- proc.time()
final_result <- Biostrings::reverse(dna)
final_result
end <- proc.time()
print(end - start)

从上面的结果我们可以看出,方法3使用stringi包的速度最快。俗话说,条条大路通罗马,不管白猫还是黑猫,抓住老鼠就是好猫。
参考资料:
网友评论