【问题标题】:Resampling overlap between two lists重采样两个列表之间的重叠
【发布时间】:2014-12-03 06:00:35
【问题描述】:

我有两个 .txt 文件。这两个文件都是字符串列表,每行一个字符串,例如。

GRIM1
PHOXA2
SLITRK4

两个文本文件的长度约为 20,000 行。我想从文件 1 中随机抽样 500 个字符串,从文件 2 中随机抽样 700 个字符串。 然后我想计算与这两个子集重叠的字符串的数量。
然后我想重复这个过程 100 次,并从 100 次重采样中计算与这些子集重叠的字符串的最小、最大和平均数。

我试图修改一些过去用于类似任务的代码,但我收到了错误:

sample.int(length(x), size, replace, prob) 中的错误: 'replace = FALSE' 时不能抽取大于总体的样本

这段代码是:

listA <- read.csv(file="file1.txt", header=F)
listB <- read.csv(file="file2.txt", header=F)

listA <- as.character(listA) # to check that you really have a vector of gene names #maybe you have to do: listA <- as.character(listA)
listB <- as.character(listB) 

res <- rep(NA, 100) 
genesToDraw <- 500 # how many to select 
genesToDraw2 <- 700 # if you want to take different number from second list

for(i in 1:length(res)){

drawA <- sample(x=listA, size=genesToDraw, replace=FALSE)
drawB <- sample(x=listB, size=genesToDraw2, replace=FALSE) # or size=genesToDraw2

res[i] <- length(intersect(drawA, drawB))
}

hist(res, breaks=20)
table(res)
max(res)
sum(res > 5) # how often i

提前感谢您的帮助,如果我需要澄清,请告诉我。

当我在代码的 as.character 部分之后运行 dput(listA) 和 dput(listB) 时响应 cmets,我得到了一堆逗号分隔的数字作为输出。这是一个子集:

1100, 4576, 7394, 1343, 4997, 13807, 1233, 9580, 15254, 10466, 3333, 622, 11177, 4067, 4800, 7592, 5363, 9646, 11213, 14314, 2475, 8389, \n12559, 12808, 5248, 10423, 7856, 12976, 9695, 1674, 2090, 9369, 12089, 13952, 1218, 7966, 6949, 4088, 623, 4768, 2002, 11776, 14710, 5502, 6212, 7300, 2123, 7194, 2128, 1683, 14987, 4491, 2672, 10275, 9424, 997, 15506, 14307, 2644, 11508, 9272, 5107, 10146, 11693, 1802, 652, 13073, 4268, 5435, 718, 4845

最好的问候,

鲁巴尔

【问题讨论】:

  • length(listA)length(listB) 的输出是什么?
  • 检查listA和listB的类。 sample 的第一个参数需要是向量或整数,并且很可能是这里的数据框。错误是说 x 中的项目数小于您要抽取的样本数,replace=FALSE 时不允许这样做
  • 类是一个字符。
  • 是的,列表的长度是 1。一定是这样。所以我应该将它们转换为向量?如果我将它们转换为整数,我将如何检查重叠,整数不是代表它们的行号而不是字符串本身吗?
  • @user964689 您可以在 as.character 调用之后运行 dput(listA) 和 dput(listB) 并将这些结果发布到您的问题中吗?

标签: r random overlap resampling


【解决方案1】:

正如我们所讨论的,首先,由于您需要字符串,因此在 read.csv 调用中将 stringsAsFactors 标志设置为 false,这样您就不会弄乱因子

listA <- read.csv(file="file1.txt", header=FALSE, stringsAsFactors=FALSE)
listB <- read.csv(file="file2.txt", header=FALSE, stringsAsFactors=FALSE)

现在您将有两个数据框,每个数据框有一列字符对象。示例函数需要向量,因此我们可以通过

将我们的一列数据帧转换为向量
listA<-listA[,1]
listB<-listB[,1]

这应该让你的代码运行!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    相关资源
    最近更新 更多