Использовать вектор строк, представляющих переменные, сгенерированные циклом for, в качестве переменной в вызове функции - PullRequest
0 голосов
/ 13 декабря 2018

Я хотел бы вызвать function() в R, используя имена переменных из строкового вектора.В моем конкретном случае я использовал цикл for для создания нумерованных имен переменных.Например:

    for (i in 1:3) {
        assign(paste0("x",i),"value")
    }
    v <- paste0("x",c(1,2,3))

    function(v) #Here I would like to call function with variables defined in for loop.

Справочная информация: у меня есть фрейм данных, который я фильтрую по различным критериям (элементы управления, случаи).Полученные векторы превращаются в объекты Grange и сохраняются как переменные или как строковый вектор каталогов.Затем я хотел бы вызвать IDRfilterN3(), используя то же количество объектов и путей Grange.Эта функция ожидает 3 объекта Grange и 3 пути.

Вот конкретный пример:

for (i in unique(samples$Treatment)){
  ind <- samples$Treatment == i
  for (j in samples$Replicate[ind]){
    assign(paste0("peaks_",i,"_",j),toGRanges(file.path(samples$Peaks[ind][j]),format = "MACS2")) 
    assign(paste0("bam_",i,"_",j),file.path(samples$bamReads[ind][j])) 
  }
  if(length(samples$Replicate[ind])==3) assign(paste0("peaks_",i,".idr"),IDRfilterN3(paste0("peaks_",i,"_",c(1,2,3)),paste0("bam_",i,"_",c(1,2,3))))
  else print("Sample size not applicable. IDR failed!")
}

Вот пример образца листа и шаги, которые мне нужно выполнить:

    ids <- paste0("ID",c(1,2,3,4))    
    condition <- c(rep("A",2),rep("B",2))
    replicate <- c(1,2,1,2)
    pathA <- paste0("/dir/sample_",c(1,2,3,4))
    pathB <- paste0("/dir/sample_",c(1,2,3,4),".bam")
    d <- data.frame(ids,condition,replicate,pathA,pathB)

    #Generate variable storing Grange object out of pathA path for each condition and replicate:
    peakA1 <- toGRanges("/dir/sample_1")
    peakA2 <- toGRanges("/dir/sample_2")
    peakB1 <- toGRanges("/dir/sample_3")
    peakB2 <- toGRanges("/dir/sample_4")

    #Call IDR function for each condition (A, B) using the replicate variables and the path from column pathB
    IDRfilterN3(peakA1, peakA2, "/dir/sample_1.bam", "/dir/sample_2.bam")
    IDRfilterN3(peakB1, peakB2, "/dir/sample_3.bam", "/dir/sample_4.bam")

Спасибо за ваш вклад.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...