Использование paste / get в петле-р - PullRequest
0 голосов
/ 16 октября 2018

Мой вопрос настолько тривиален, я хочу вставить вектор в цикл вроде этого

 Mysheetlandscap <- excel_sheets("C:/FAPSEP_Eucalyptus/FAPSEP/AHMED_GDAY/CloneParnew5_forCALIB2.xlsx")

for(j in 1:length(Mysheetlandscap)){

  ClonePar <- read_excel("C:/FAPSEP_Eucalyptus/FAPSEP/AHMED_GDAY/CloneParnew5_forCALIB2.xlsx", sheet = Mysheetlandscap[j])

  x <- ClonePar$,j,[!is.na(ClonePar$MIN_CL)]  #should return the vector ClonePar$j
  }

Итак, я попытался

get(paste0("ClonePar$",j))

Ошибка в get (paste0 ("ClonePar $", j)): объект 'Cal_OCT_18_GLM $ C041H' не найден

Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

примечание: Я использовал seq_along вместо 1:length(), чтобы вы не получили ничего лишнего, если у вас есть пустой фрейм данных

Если вы хотите использоватьfor loop:

ClonePar <- list() #create empty list

for(j in seq_along(Mysheetlandscap)){

  ClonePar[j] <- read_excel("C:/FAPSEP_Eucalyptus/FAPSEP/AHMED_GDAY/CloneParnew5_forCALIB2.xlsx", sheet = Mysheetlandscap[j])

}

ClonePar[[1]] #look the first element (a data frame) in your newly filled list

Если вы хотите использовать семейство apply (на основе ответа Владимира):

ClonePar <- lapply(seq_along(Mysheetlandscap),
                   function(j) read_excel("C:/FAPSEP_Eucalyptus/FAPSEP/AHMED_GDAY/CloneParnew5_forCALIB2.xlsx", sheet = j))

в случае использования lapply выне нужно создавать пустой list перед выполнением векторизованной операции.

0 голосов
/ 16 октября 2018

Это трудно понять ... Но, может быть, это то, что вы хотите:

ClonePar <- lapply(1:length(Mysheetlandscap), function(j)
read_excel("C:/FAPSEP_Eucalyptus/FAPSEP/AHMED_GDAY/CloneParnew5_forCALIB2.xlsx", sheet = j))

j<-10
x <- ClonePar[[10]]
...