цикл по коду без ошибки - PullRequest
       1

цикл по коду без ошибки

0 голосов
/ 23 ноября 2018

У меня есть кусок кода r, как показано ниже.

sce_1$use <- cellFilter(sce_1, 2500, 1000, 5)
sce_2$use <- cellFilter(sce_2, 2500, 1000, 5)
sce_3$use <- cellFilter(sce_3, 2500, 1000, 5)
sce_4$use <- cellFilter(sce_4, 3000, 1000, 5)
sce_5$use <- cellFilter(sce_5, 3000, 1000, 5)

Этот код работает без ошибок и предупреждений.Чтобы автоматизировать и очистить процесс, я пытаюсь поместить это в цикл.

    sce_list=mget(sce)
    for (i in 1:length(paths))
    sce_list[i]$use <- cellFilter(sce_list[i], 3000, 1000, 5)

    The error I get

    Quitting from lines 209-213 (prototype.Rmd) 
    Error in sce$total_features : $ operator is invalid for atomic vectors
    Calls: <Anonymous> ... eval -> eval -> cellFilter -> filter_by_expr_features
    Execution halted 

Что еще я пробовал, это:

    sce_list=mget(sce)
    for (i in 1:length(paths))
     get(paste0("sce_",i))$use <- cellFilter(sce[i], 2500, 1000, 5)

the error I get is

Quitting from lines 209-213 (prototype.Rmd) 
Error in sce$total_features : $ operator is invalid for atomic vectors
Calls: <Anonymous> ... eval -> eval -> cellFilter -> filter_by_expr_features
Execution halted

На одном из предложений из комментариев,Я использовал:

sce_list=mget(sce)
    for (i in 1:length(paths))
     sce_list[[i]]$use <- cellFilter(sce_list[[i]], 2500, 1000, 5)

Это прекрасно работает.Тем не менее, следующий фрагмент кода, который использует предыдущую часть и используется для нормальной работы без зацикливания предыдущего фрагмента.Однако теперь он выдает ошибку.

automateFiltering <- function(sce){

    options(repr.plot.width=4, repr.plot.height=4)
    plotPCA(
        sce,
        size_by = "total_features", 
        pca_data_input = "pdata",
        shape_by = "use",
        detect_outliers = TRUE,
        return_SCE = TRUE
    )
}

sce_1 <- automateFiltering(sce_1)
 sce_2 <- automateFiltering(sce_2)
   sce_3 <- automateFiltering(sce_3)
    sce_4 <- automateFiltering(sce_4) 

ошибка:

    Quitting from lines 241-246 (prototype.Rmd) 
Error in .choose_vis_values(object, shape_by, cell_control_default = TRUE,  : 
  'use' not found in 'colnames(colData(x))'
Calls: <Anonymous> ... plotPCA -> .local -> plotReducedDim -> .choose_vis_values
Execution halted

1 Ответ

0 голосов
/ 23 ноября 2018

Я не уверен, что ответ является следующим, в вопросе отсутствует пример набора данных.

Очевидно, что инструкция mget работает.

sce_list <- mget(sce)

Затем вы создаете переменную use в каждом объекте-члене списка, необходимом для вызова automateFiltering.И присвойте возвращаемое значение automateFiltering обратно тому же объекту списка.
Это уничтожит предыдущее содержимое каждого sce_list[[i]].

for (i in seq_along(sce_list)){
  sce_list[[i]]$use <- cellFilter(sce_list[[i]], 2500, 1000, 5)
  sce_list[[i]] <- automateFiltering(sce_list[[i]])
}

Если вы хотитечтобы сохранить sce_list, присвойте возвращаемое значение automateFiltering другому списку, я называю sce_auto.

sce_auto <- vector("list", length(sce_list))
for (i in seq_along(sce_list)){
  sce_list[[i]]$use <- cellFilter(sce_list[[i]], 2500, 1000, 5)
  sce_auto[[i]] <- automateFiltering(sce_list[[i]])
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...