4

私のファイルは次のとおりです。

CT.BP.50.txt
CT.BP.200.txt
CT.BP.500.txt 
GP.BP.50.txt
GP.BP.200.txt 
GP.BP.500.txt 

files <- c("CT.BP.50.txt", "CT.BP.200.txt", "CT.BP.500.txt", "GP.BP.50.txt", "GP.BP.200.txt", "GP.BP.500.txt")

それらに対して特定の操作を実行したいのですが、これを実行できます。

for (i in 1:length(files)) {
    foo <- read.table(files[i])
    barplot(table(foo$V1), main = files[i])
}

しかし、Rはそれらを次の順序でプロットします。

"CT.BP.200.txt" "CT.BP.500.txt" "CT.BP.50.txt" "GP.BP.200.txt" "GP.BP.500.txt" "GP.BP. 50.txt」

そして、それらをソートされた順序でプロットする必要があります。

"CT.BP.50.txt" "CT.BP.200.txt" "CT.BP.500.txt" "GP.BP.50.txt" "GP.BP.200.txt" "GP.BP. 500.txt」

英数字の名前でオブジェクトを並べ替える方法は?

4

3 に答える 3

11

問題はlist.files()、ファイル名を標準の(字句的に)ソートされた順序で返し、数字が数値の一部としてではなく、位置ごとに比較されることです。

files <- sort(c("Gen.Var_CT.BP.200.txt", "Gen.Var_CT.BP.500.txt", 
                "Gen.Var_CT.BP.50.txt", "Gen.Var_GP.BP.200.txt",
                "Gen.Var_GP.BP.500.txt", "Gen.Var_GP.BP.50.txt"))

私のシステムでは、これは次のようになります。

> files
[1] "Gen.Var_CT.BP.200.txt" "Gen.Var_CT.BP.50.txt"  "Gen.Var_CT.BP.500.txt"
[4] "Gen.Var_GP.BP.200.txt" "Gen.Var_GP.BP.50.txt"  "Gen.Var_GP.BP.500.txt"

この関数gtools::mixedsortは(一般的に)希望どおりに並べ替えます。文字列内の一連の数字は、並べ替えの目的で数値として扱われます。mixedsortただし、仮定は数値の一部であり、実際には数値として並べ替えることができない潜在的な.数値と見なされるため、例には多少の問題があります。.200.例には実際の小数点が含まれていないため、これを回避できます。

files <- files[mixedorder(gsub("\\.", " ", files))]

したがって、ファイルは次のように並べ替えられます。

> files
[1] "Gen.Var_CT.BP.50.txt"  "Gen.Var_CT.BP.200.txt" "Gen.Var_CT.BP.500.txt"
[4] "Gen.Var_GP.BP.50.txt"  "Gen.Var_GP.BP.200.txt" "Gen.Var_GP.BP.500.txt"
于 2012-04-13T16:29:10.487 に答える
2

Might this do it?

files <- c("Gen.Var_CT.BP.50.txt", "Gen.Var_CT.BP.200.txt", "Gen.Var_CT.BP.500.txt",    "Gen.Var_GP.BP.50.txt", "Gen.Var_GP.BP.200.txt", "Gen.Var_GP.BP.500.txt"){
for (i in 1:length(files)) {
  b <- read.table(files[i])
  barplot(table(b$V1), main=files[i])
于 2012-04-13T16:07:46.693 に答える
1

It looks like you want to sort by particular components of your filename in a particular order.

So I would start by breaking the filename into its components with something like:

filesmat=matrix(unlist(strsplit(files,split='\\.')),byrow=T,ncol=4)

then extract columns that you want to sort by.

numbercomponent=as.numeric(filesmat[,3])

varname=filesmat[,1]

次に、ファイル名を次のように並べ替えます

files=files[order(varname,numbercomponent)]

次に、とにかく好きなようにプロットします。

于 2012-04-13T16:24:32.023 に答える