我有一个格式为
的文本文件>species1
0.432
0.323
0.987
(possibly continued...)
>species2
-0.332
依旧......
我有4个变量,totalcomsize, totalp, pol_pla, nvp_vp
让我们说它们是常数,因此很容易硬编码。我怎样才能获取>species1
下的所有值并将它们与上述4个变量中的每一个进行对比,然后保存名为species1_vs_variable
的图,其中变量是上面的变量之一。我想用R和bash代码做这个,任何人都可以帮忙吗?
EDITED
好的,作为一个简短的例子,上面提到的4个变量对应于一组FIXED点,因此每个变量可以是[1, 2, 3, 4, 5]
。以>
开头的每一行表示有一组新数据要与上述4个变量中的每一个进行比较。因此>Species1
可以是>Drosophila Melanogaster
,并且其下面的每个数字都以新行分隔,该值包含在与D.Melanogaster相对应的该集合中。但是你基本上想要所有的值,直到下一行以>
开头。所以你最终可能会得到一个物种[0.2, 0.4, 0.6]
的物种果蝇(Drosophila melanogaster)。然后,您希望为每个4个固定变量(totalcomsize, totalp, pol_pla, nvp_vp
)创建该数据集的线图,并保存图,为其提供与物种相对应的文件名。我想自动化这个,因为有很多种类。这意味着#species * 4图表可以手动绘制。所以你可以看到我为什么要这样做。我确实设法将它放在一个更好的格式中,其中物种在一条线上分开,例如
anthomyiidae_sp_2_NVP anthomyiidae_sp_1_NVP anthomyiidae_sp_3_NVP
-0.221 0.188 0.989
0.972 0.092 0.924
然后它们的值以制表符分隔格式显示在下一行,依此类推,直到没有更多值。我能够导入这个文件,这有点帮助。但我仍然可以使用一个好的建议。
答案 0 :(得分:0)
很多评论都很清楚,你想做什么。
但是,我认为数据的特殊格式很有趣。由于您有按类别分组的数据格式的数据。您可以轻松地使用它们。
我使用特殊的分隔符读取数据:
dat <- read.table(text ='>species1
0.432
0.323
0.987
>species2
-0.332',sep ='>',fill=TRUE,colClasses=c('numeric','character'))
dat
V1 V2
1 NA species1
2 0.432
3 0.323
4 0.987
5 NA species2
6 -0.332
我尝试用之前的值
填补V2中的空白L <- dat$V2 != ''
idx <- c(NA,which(L))[cumsum(L)+1]
dat$V2 <- dat$V2[idx]
dat
V1 V2
1 NA species1
2 0.432 species1
3 0.323 species1
4 0.987 species1
5 NA species2
6 -0.332 species2
然后我删除NA值
dat <- na.omit(dat)
V1 V2
2 0.432 species1
3 0.323 species1
4 0.987 species1
6 -0.332 species2
根据评论中的建议,您可以在spiecs
索引的列表上创建处理library(plyr)
ll <- dlply(dat,.(V2),function(x) x$V1)
ll
$species1
[1] 0.432 0.323 0.987
$species2
[1] -0.332
答案 1 :(得分:0)
如果每个变量都有一个文件(假设你的文件以你的变量命名),我建议这样做:
vars <- c("totalcomsize", "totalp", "pol_pla", "nvp_vp")
for(v in vars){
f <- readLines(paste(v, "txt", sep"."))
index <- grep(">",f) # Spot lines that start with a >
mat <- apply(cbind(index, c(index[-1]-1,length(f))), 1,
function(X){as.numeric(f[(X[1]+1):X[2]])})
# break the file at each lines spotted in the preceding step
names(res) <- gsub(">","",f[index]) # Names each element of the list according to the lines starting with >
for(i in 1:length(res)){ # Loop to create a plot for each species vs each variable
pdf(paste(names(res)[i],"_vs_", v, ".pdf",sep=""))
plot(res[[i]])
dev.off()
}
}
对于每个变量,res
是表单列表:
res
$species1
[1] 0.432 0.323 0.987
$species2
[1] -0.332