R: рассчитать проценты по диапазону данных - создать корзину

Я абсолютно новичок в кодировании в R - на самом деле кодирование в целом, так что извините за мое невежество.

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

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

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

person czyscner    schedule 01.07.2015    source источник
comment
Каков ваш желаемый результат?   -  person ExperimenteR    schedule 01.07.2015


Ответы (1)


ошибка означает, что вы указываете вектор в качестве первого аргумента (а также второго) для 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))
person mts    schedule 01.07.2015
comment
Я только что нашел более приятный способ mapply(bin_it, feature[,2], feature[,3], 100) - person mts; 01.07.2015
comment
Замечательно, спасибо большое! Это сработало для меня, если применить функцию к строкам моих данных. Однако я получаю сообщение об ошибке другого типа: Error in data.frame(v1, v2) : arguments imply differing number of rows: 99, 101 Теперь мне просто нужно найти то, что мне не хватает в определении v1 и v2. - person czyscner; 01.07.2015