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