2012-09-06 3 views
-1

я задавался вопросом, как сделать что-то, что проверяет, если колонки Lair в dataПроверить, если столбец имеет значение, если это прямо истинным или ложным в колонке рядом с ним

выше или ниже определенный порог позволяет говорить ниже 0,5 называется LOH en выше, называется дисбалансом. Поэтому вызовы LOH и INBALANCE должны быть записаны в новом столбце. Я попробовал что-то в качестве кода ниже.

detection<-function(assay,method,thres){ 
    if(method=="threshold"){ 
    idx<-ifelse(segmenten["intensity"]<1.1000000 & segmenten["intensity"]>0.900000 & segmenten["Lair"]>thres,TRUE,FALSE) 
    } 
    if(method=="cnloh"){ 
    idx<-ifelse(segmenten["intensity"]<1.1000000 & segmenten["intensity"]>0.900000 & segmenten["Lair"]<thres,TRUE,FALSE) 
    } 
    if(method=="gain"){ 
    idx<-ifelse(segmenten["intensity"]>1.1000000 & segmenten["Lair"]<thres,TRUE,FALSE) 
    } 
    if(method=="loss"){ 
    idx<-ifelse(segmenten["intensity"]<0.900000 & segmenten["Lair"]<thres,TRUE,FALSE) 
    } 
    if(method=="bloss"){ 
    idx<-ifelse(segmenten["intensity"]<0.900000 & segmenten["Lair"]>thres,TRUE,FALSE) 
    } 
    if(method=="bgain"){ 
    idx<-ifelse(segmenten["intensity"]>1.100000 & segmenten["Lair"]>thres,TRUE,FALSE) 
    } 
    return(idx) 
} 

После этой части следующего этапа необходимо записать данные из этой функции в существующую таблицу. У кого-нибудь есть идея

+1

Не нужно определять функцию для него. Просто используйте 'factor (интенсивность> thres, levels = c (FALSE, TRUE), label = c (" LOH "," IMBALANCE ")). – Backlin

+0

@Backlin спасибо! 1 вопрос остался, как ведет себя порог, и можно ли дать параметры оценки 3, такие как LOH, BALANCE и IMBALANCE. – Sanshine

+1

'factor (findInterval (интенсивность, thres), уровни = 0: 2, метки = c (...)) 'где' thres' - две точки отсечки, разделяющие группы. То, как вы решили решить это, говорит о том, что вы должны прочитать об основных принципах R. Есть много хороших книг на выбор, и поскольку вы, похоже, знаете, как программировать, я бы предложил [искусство программирования R] (http://nostarch.com/artofr.htm). Он кратко описывает основы (без лишнего пуха), прежде чем перейти к более продвинутым темам. Я нахожу это очень полезным. – Backlin

ответ

1

Поскольку ваш желаемый результат недостаточно ясен, я сделал некоторые предположения и написал что-то полезное или нет.

Сначала вообще, внутри вашей функции есть объект segmenten, который не определен, я полагаю, что это набор данных поставляются в качестве входных данных, то вы использовали IfElse и вернувшиеся результаты TRUE или FALSE, но вы хотите либо LOH или INBALANCE, когда выполняются некоторые условия.

Вы хотите INBALANCE когда ... & segmenten["Lair"]>thres и LOH в противном случае (здесь ... означает другую часть условия), это даст вектор, но вы хотите его в главном наборе данных в качестве addional колонки, не так ли? Возможно, это может стать новой отправной точкой для улучшения вашего кода.

detection <- function(assay, method=c('threshold', 'cnloh', 'gain', 'loss', 'bloss', 'bgain'), 
        thres=0.5){ 
    x <- assay 
    idx <- switch(match.arg(method), 
     threshold = ifelse(x["intensity"]<1.1 & x["intensity"]>0.9 & x["Lair"]>thres, 'INBALANCE', 'LOH'), 
     cnloh  = ifelse(x["intensity"]<1.1 & x["intensity"]>0.9 & x["Lair"]<thres, 'LOH', 'INBALANCE'), 
     gain  = ifelse(x["intensity"]>1.1 & x["Lair"]<thres, 'LOH', 'INBALANCE'), 
     loss  = ifelse(x["intensity"]<0.9 & x["Lair"]<thres,'LOH', 'INBALANCE'), 
     bloss  = ifelse(x["intensity"]<0.9 & x["Lair"]>thres, 'INBALANCE', 'LOH'), 
     bgain  = ifelse(x["intensity"]>1.1 & x["Lair"]>thres, 'INBALANCE', 'LOH')) 

    colnames(idx) <- 'Checking' 
    return(cbind(x, as.data.frame(idx))) 
    } 

Пример:

Data <- read.csv("japansegment data.csv", header=T) 

result <- detection(Data, method='threshold', thres=0.5) # 'threshold' is the default value for method 
head(result) 
     SNP_NAME x0 x1 y pos.start pos.end chrom count copynumber intensity allele.B Lair uncertain sample_id 
1 SNP_A-1656705 0 0 0 836727 27933161  1 230   2 1.0783  1 0.9218  FALSE GSM288035 
2 SNP_A-1677548 0 0 0 28244579 246860994  1 4408   2 0.9827  1 0.9236  FALSE GSM288035 
3 SNP_A-1669537 0 0 0 100819 159783145  2 3480   2 0.9806  1 0.9193  FALSE GSM288035 
4 SNP_A-1758569 0 0 0 159783255 159791136  2  5   2 1.7244  1 0.9665  FALSE GSM288035 
5 SNP_A-1662168 0 0 0 159817465 168664268  2 250   2 0.9786  1 0.9197  FALSE GSM288035 
6 SNP_A-1723506 0 0 0 168721411 168721920  2  2   2 1.8027  -4  NA  FALSE GSM288035 
    Checking 
1 INBALANCE 
2 INBALANCE 
3 INBALANCE 
4  LOH 
5 INBALANCE 
6  LOH 

Использование match.arg и switch функций поможет вам избежать многих if заявлений.

+0

Правильно, что я просил о благодарности;). – Sanshine

Смежные вопросы