2015-07-01 4 views
-1

Я абсолютно новый для кодирования в R - на самом деле кодирование в целом, поэтому извините мое невежество.R: рассчитать процент через диапазон данных - создать бункер

У меня есть файл данных со значениями «старт» и «конец» для функций различной длины. Я хотел бы вывести файл, который создает ячейки для каждой функции (строки данных) в процентах по длине функции (1 - 100%).

Я думаю, что это по существу отвечает на вопрос, но я все еще возникают вопросы: R : Create specific bin based on data range

bin_it <- function(START, END, BINS) { 
    range <- END-START 
    jump <- range/BINS 
    v1 <- c(START, seq(START+jump+1, END, jump)) 
    v2 <- seq(START+jump-1, END, jump)+1 
    data.frame(v1, v2) 
} 

Мои конкретные данные выглядит следующим образом:

feature <- data.frame(chrom, start, end, feature_name, value, strand) 
chr2L 7529 9484 CG11023 1 + 
chr2L 21952 24237 CR43609 1 + 
chr2L 65999 66242 CR45339 1 + 

Используя код выше, я пытался :

bin_it <- function(START, END, BINS) { 
     range <- START-END 
     jump <- range/BINS 
     v1 <- c(START, seq(START+jump, END, jump)) 
     v2 <- seq(START+jump, END, jump) 
     data.frame(v1, v2) 
    } 

bin_it(feature[,2], feature[,3], 100) 

Я получаю это сообщение об ошибке:

Error in seq.default(START + jump + 1, END, jump) : 
'from' must be of length 1 

Любые предложения относительно того, как исправить это?

Обновление:

В качестве примера из первой строки набора данных выше: START = 7529, END = 9484, BINS = 10 (to simplify), range = 1955, jump = 195.5

Желаемый результат будет:

 v1  v2 
[1] 7529.0 7724.5 
[2] 7724.5 7920.0 
[3] 7920.0 8115.5 
     ... 
[9] 9093 9288.5 
[10] 9288.5 9484 
+0

Каков ваш желаемый результат? – ExperimenteR

ответ

0

ошибка означает, что вы поставить вектор как первый аргумент (а также второй) до seq вместо одного номера. попробуйте с bin_it(feature[1,2], feature[1,3], 100), и он должен работать нормально. теперь исправить это либо сделать петлю (плохо)

output = c() 
for(l in 1:dim(feature)[1]){ 
    output = c(output, bin_it(feature[l,2], feature[l,3], 100)) 
} 

или (путь лучше) используйте семейство apply. в вашем случае что-то вроде этого должно это сделать:

output = apply(feature[,2:3], 1, function(x) bin_it(START = x[,1], END = x[,2], BINS = 100)) 
+0

Я просто нашел более удобный способ: «mapply (bin_it, feature [, 2], feature [, 3], 100)' – mts

+0

Замечательно, большое вам спасибо! Это сработало для меня, применив функцию к строкам моих данных. Тем не менее, я получаю другой тип ошибки: 'Ошибка в data.frame (v1, v2): аргументы подразумевают различное количество строк: 99, 101' Теперь мне просто нужно найти то, что мне не хватает при определении v1 и v2. – czyscner