python查找指定數據,用R繪圖

python 查找指定字符串 ,找出相應的數據行

def get_target_Lines(fr, s):

    f_handle = open(fr, "r")

    targets = []
    #flag = False
    for num, line in enumerate(f_handle):
        if line.startswith(s):
            tmp = num
        try:
            if num > tmp and line.rstrip() != "":
                targets.append(line.rstrip())
            elif num > tmp and line.rstrip() == "":
        #        flag = True
                break
        except NameError, e:
            pass

        #if flag:
        #    break

    return targets


tgets = get_target_Lines( "outfile_f"  , "Inferred ancestry")


用R  自定義函數


用apply, sprintf , order等函數

> mean
function (x, ...) 
UseMethod("mean")
<bytecode: 0x00000000111edea8>
<environment: namespace:base>


> mean.default
function (x, trim = 0, na.rm = FALSE, ...) 
{
    if (!is.numeric(x) && !is.complex(x) && !is.logical(x)) {
        warning("argument is not numeric or logical: returning NA")
        return(NA_real_)
    }
    if (na.rm) 
        x <- x[!is.na(x)]
    if (!is.numeric(trim) || length(trim) != 1L) 
        stop("'trim' must be numeric of length one")
    n <- length(x)
    if (trim > 0 && n) {
        if (is.complex(x)) 
            stop("trimmed means are not defined for complex data")
        if (anyNA(x)) 
            return(NA_real_)
        if (trim >= 0.5) 
            return(stats::median(x, na.rm = FALSE))
        lo <- floor(n * trim) + 1
        hi <- n + 1 - lo
        x <- sort.int(x, partial = unique(c(lo, hi)))[lo:hi]
    }
    .Internal(mean(x))
}
<bytecode: 0x00000000111ee3c0>
<environment: namespace:base>

/////////////////////////////////////////////////////////////////////


> mt <- function(v){
+     n <- length(v)
+     t1 <- v[1:5]
+     tp <- sum(v[6:n])
+     t2 <- v[6:n]
+     if (tp > 35){
+         max_index = which(t2==max(t2))[1]
+         t2[max_index] = max(t2)- tp + 35
+     }
+     return(c(t1,t2))
+ }

> mt(1:10)
 [1] 1 2 3 4 5 6 7 8 9 5
 
> a <- 1:10
> b <- c(2,5,6,7, 466, 466,466, 34,5,2)
> c <- c(2,5,6,7, 466, 89,14, 56,7,2)
> data1 <- data.frame(a,b,c)
> data1
    a   b   c
1   1   2   2
2   2   5   5
3   3   6   6
4   4   7   7
5   5 466 466
6   6 466  89
7   7 466  14
8   8  34  56
9   9   5   7
10 10   2   2

> apply(data1, 2, mt)
      a    b   c
 [1,] 1    2   2
 [2,] 2    5   5
 [3,] 3    6   6
 [4,] 4    7   7
 [5,] 5  466 466
 [6,] 6 -472 -44
 [7,] 7  466  14
 [8,] 8   34  56
 [9,] 9    5   7
[10,] 5    2   2

> data1 <- data.frame(rbind(a,b,c) )
> data1
  X1 X2 X3 X4  X5  X6  X7 X8 X9 X10
a  1  2  3  4   5   6   7  8  9  10
b  2  5  6  7 466 466 466 34  5   2
c  2  5  6  7 466  89  14 56  7   2

> apply(data1, 1, mt)
    a    b   c
X1  1    2   2
X2  2    5   5
X3  3    6   6
X4  4    7   7
X5  5  466 466
X6  6 -472 -44
X7  7  466  14
X8  8   34  56
X9  9    5   7
X10 5    2   2

///////////////////////////////////////////////////////////////////////

> data <- read.table("test_plot.txt", skip=1, stringsAsFactors =F)

> c("A","B",3)
[1] "A" "B" "3"

> mt <- function(v){
       n <- length(v)
       t1 <- v[1:5]
       t2 <- as.numeric(v[6:n])
       tp <- sum(t2)
       
        if (tp > 1){
             max_index = which(t2==max(t2))[1]
           t2[max_index] = max(t2)- tp + 1
         } else if (tp < 1){
             min_index = which(t2==min(t2))[1]
             t2[min_index] = min(t2) + 1 - tp 
         }
         return(c(t1,t2))
   }
   
> 
> apply(data[1:3,], 1, mt)
   1       2       3      
V1 "1"     "2"     "3"    
V2 "100"   "101"   "102"  
V3 "(0)"   "(0)"   "(0)"  
V4 "1"     "1"     "1"    
V5 ":"     ":"     ":"    
   "0.663" "0.767" "0.651"
   "0.185" "0.042" "0.083"
   "0.039" "0.033" "0.062"
   "0.113" "0.158" "0.204"


> t(apply(data, 1, mt))
       V1    V2    V3    V4  V5                                           
  [1,] "  1" "100" "(0)" "1" ":" "0.663"              "0.185"             
  [2,] "  2" "101" "(0)" "1" ":" "0.767"              "0.042"             
  [3,] "  3" "102" "(0)" "1" ":" "0.651"              "0.083"             
  [4,] "  4" "103" "(0)" "1" ":" "0.358"              "0.078"             
  [5,] "  5" "104" "(0)" "1" ":" "0.062"              "0.096"             
  [6,] "  6" "105" "(0)" "1" ":" "0.058"              "0.098"             



> t <- sprintf( "%.7f", 1.44*1.21)
> t
[1] "1.7424000"
> t <- sprintf( "%.3f", 1.44*1.21)
> t
[1] "1.742"

> mt <- function(v){
+        n <- length(v)
+        t1 <- v[1:5]
+        t2 <- as.numeric(v[6:n])
+        tp <- sum(t2)
+        
+         if (tp > 1){
+              max_index <- which(t2==max(t2))[1]
+              t2[max_index] <- sprintf("%.3f", max(t2)-tp+1)
+         } else if (tp < 1){
+              min_index <- which(t2==min(t2))[1]
+              t2[min_index] <- sprintf("%.3f", min(t2) + 1 - tp)
+         }
+         return(c(t1,t2))
+ }


> head(data)
  V1  V2  V3 V4 V5    V6    V7    V8    V9
1  1 100 (0)  1  : 0.663 0.185 0.038 0.113
2  2 101 (0)  1  : 0.767 0.042 0.033 0.158
3  3 102 (0)  1  : 0.651 0.083 0.062 0.204
4  4 103 (0)  1  : 0.358 0.078 0.185 0.379
5  5 104 (0)  1  : 0.062 0.096 0.487 0.355
6  6 105 (0)  1  : 0.058 0.098 0.516 0.329

> head(data[,6:9])
     V6    V7    V8    V9
1 0.663 0.185 0.038 0.113
2 0.767 0.042 0.033 0.158
3 0.651 0.083 0.062 0.204
4 0.358 0.078 0.185 0.379
5 0.062 0.096 0.487 0.355
6 0.058 0.098 0.516 0.329
          

> head(t(apply(data, 1, mt)))
     V1    V2    V3    V4  V5                                 
[1,] "  1" "100" "(0)" "1" ":" "0.663" "0.185" "0.039" "0.113"
[2,] "  2" "101" "(0)" "1" ":" "0.767" "0.042" "0.033" "0.158"
[3,] "  3" "102" "(0)" "1" ":" "0.651" "0.083" "0.062" "0.204"
[4,] "  4" "103" "(0)" "1" ":" "0.358" "0.078" "0.185" "0.379"
[5,] "  5" "104" "(0)" "1" ":" "0.062" "0.096" "0.487" "0.355"
[6,] "  6" "105" "(0)" "1" ":" "0.058" "0.098" "0.515" "0.329"

> apply(data[,6:9], 1 , sum)
  [1] 0.999 1.000 1.000 1.000 1.000 1.001 1.000 1.000 1.000 1.000 1.000 1.000
 [13] 1.001 1.000 1.000 1.001 0.999 0.999 1.000 1.000 1.000 1.000 1.000 1.000
 [25] 1.001 1.000 1.001 1.000 0.999 1.000 1.000 1.000 1.000 1.000 1.001 1.000
 [37] 1.000 1.000 0.999 1.000 0.999 1.001 1.000 0.999 1.000 1.000 1.000 1.000
 [49] 1.000 0.999 1.000 1.000 1.001 1.000 1.001 1.000 1.000 1.001 1.000 1.000
 [61] 1.000 1.000 1.000 1.001 0.999 1.000 0.999 1.001 0.999 0.999 1.000 1.000
 [73] 0.999 1.000 1.000 1.000 0.999 1.000 1.000 1.001 1.000 1.000 1.000 1.001
 [85] 1.000 1.001 1.000 1.000 1.000 1.001 1.000 1.000 1.000 1.000 1.000 1.001
 [97] 1.001 1.000 1.000 1.000 1.000 1.000 1.001 1.001 1.000 1.001 1.000 1.000
[109] 1.000 1.000 0.999 0.999 1.001 1.000 1.000 1.000 0.999 1.001 1.000 1.000
[121] 1.000 1.000 1.000 1.000 1.000 0.999 1.000 1.000 1.000 1.000 1.000 1.000
[133] 1.000 1.001 1.001 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
[145] 1.001 0.999 1.000 0.999 1.000 1.000 0.999 1.000 0.999 1.000 0.999 1.000
[157] 0.999 0.999 1.000 1.001 1.000 1.001 1.000 1.000 1.000 0.999 1.000 1.001
[169] 1.000 1.000 0.999 1.000 1.000 1.000 0.999

> x <- t(apply(data, 1, mt))

> head(x)
     V1    V2    V3    V4  V5                                 
[1,] "  1" "100" "(0)" "1" ":" "0.663" "0.185" "0.039" "0.113"
[2,] "  2" "101" "(0)" "1" ":" "0.767" "0.042" "0.033" "0.158"
[3,] "  3" "102" "(0)" "1" ":" "0.651" "0.083" "0.062" "0.204"
[4,] "  4" "103" "(0)" "1" ":" "0.358" "0.078" "0.185" "0.379"
[5,] "  5" "104" "(0)" "1" ":" "0.062" "0.096" "0.487" "0.355"
[6,] "  6" "105" "(0)" "1" ":" "0.058" "0.098" "0.515" "0.329"


> head(x[,6:9])
                                    
[1,] "0.663" "0.185" "0.039" "0.113"
[2,] "0.767" "0.042" "0.033" "0.158"
[3,] "0.651" "0.083" "0.062" "0.204"
[4,] "0.358" "0.078" "0.185" "0.379"
[5,] "0.062" "0.096" "0.487" "0.355"
[6,] "0.058" "0.098" "0.515" "0.329"
     

> m  <- apply(data.frame(x[,6:9]), 1, as.numeric)

> apply(m,2,sum)

  [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 [37] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 [73] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[109] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[145] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

> n  <- apply(data.frame(x[,6:9]), 2, as.numeric)

> apply(n,1,sum)
  [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 [37] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 [73] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[109] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[145] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
> 

/////////////////////////////////////////////////////////////////////

> x <- t(apply(data, 1, mt))
> head(x)
     V1    V2    V3    V4  V5                                 
[1,] "  1" "100" "(0)" "1" ":" "0.663" "0.185" "0.039" "0.113"
[2,] "  2" "101" "(0)" "1" ":" "0.767" "0.042" "0.033" "0.158"
[3,] "  3" "102" "(0)" "1" ":" "0.651" "0.083" "0.062" "0.204"
[4,] "  4" "103" "(0)" "1" ":" "0.358" "0.078" "0.185" "0.379"
[5,] "  5" "104" "(0)" "1" ":" "0.062" "0.096" "0.487" "0.355"
[6,] "  6" "105" "(0)" "1" ":" "0.058" "0.098" "0.515" "0.329"

> x1 <- as.data.frame(x)
> head(x1)
   V1  V2  V3 V4 V5    V6    V7    V8    V9
1   1 100 (0)  1  : 0.663 0.185 0.039 0.113
2   2 101 (0)  1  : 0.767 0.042 0.033 0.158
3   3 102 (0)  1  : 0.651 0.083 0.062 0.204
4   4 103 (0)  1  : 0.358 0.078 0.185 0.379
5   5 104 (0)  1  : 0.062 0.096 0.487 0.355
6   6 105 (0)  1  : 0.058 0.098 0.515 0.329

> data_p <- x1[order(x1[,6], decreasing=T),]

> pdf("graph.pdf", height=5, width=15)
> barplot(as.matrix(t(data_p[,6:9])), names.arg=data_p$V2, col=rainbow(4), border= rainbow(4), las=2, cex.names=0.35, cex.axis =0.65)

> dev.off()
null device 
          1 
>


繪圖結果:


wKiom1h9tNnBpdpRAADVFI4ZP_g173.jpg-wh_50

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章