我有两个.txt文件。这两个文件都是字符串列表,每行一个字符串,例如。
GRIM1
PHOXA2
SLITRK4
两个文本文件都长约20,000行。我想从文件1中随机抽取500个字符串,从文件2中随机抽取700个字符串。 然后我想计算与这两个子集重叠的字符串数量 然后我想重复这个过程100次并计算从100次重采样中重叠这些子集的最小,最大和平均字符串数。
我试图调整一些曾经用于类似任务的代码,但是我收到了一个错误:
Error in sample.int(length(x), size, replace, prob) :
cannot take a sample larger than the population when '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)时,我收到一堆逗号分隔的数字作为输出。这是一个子集:
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
致以最诚挚的问候,
Rubal
答案 0 :(得分: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]
这应该让你的代码运行!