R - Вставить команду для вызова имени матрицы - PullRequest
0 голосов
/ 06 марта 2019

У меня есть следующие команды для одной указанной страны, здесь AT, и я хотел бы сделать это для более.

c1<-grep(pattern="AT",x=names(climatebig3),value=TRUE)
c1matAT<-climatebig3[c1]
c1matAT<-c1matAT[,which(apply(!is.na(c1matAT[1:27,]),2,all))]

Взятие вектора стран и цикл по первым двум командам работает, но не по третьей.

countries<-c("AT","BE","BG","CZ","DK","DE","EE","IE","EL","ES","FR","HR","IT","CY","LV","LT","LU","HU","MT","NL","PL","PT","RO","SI","SK","FI","SE","UK")


for (i in 1:28){assign(paste("c1mat",as.character(countries[[i]]),sep=""),climatebig3[,grep(pattern=as.character(countries[[i]]),x=names(climatebig3),value=TRUE)])

assign(paste("c1mat",as.character(countries[[i]]),sep="", paste("c1mat",as.character(countries[[i]]),sep="")[,which(apply(!is.na(as.character(paste("c1mat",as.character(countries[[i]]),sep=""))[1:27,]),2,all))])}

По какой-то причине команда вставки просто вызывает имя матрицы и не распознает его как матрицу в последней строке кода. Спасибо всем заранее!

1 Ответ

1 голос
/ 06 марта 2019

Не (никогда) не используйте assign.Вместо этого используйте списки:

#Create an empty named list the same length as the number of countries
c1mat_list <- setNames(vector("list",length(countires)),countries)

#Loop through countries and populate the list
for (x in countries){
  c1 <- grep(pattern= x,x=names(climatebig3),value=TRUE)
  c1mat_list[[x]] <-climatebig3[c1]
  #etc.
}
...