Почему этот цикл не работает? - PullRequest
0 голосов
/ 09 мая 2018

У меня разные фреймы данных с одинаковыми номерами и именами столбцов. Я хочу преобразовать одну и ту же переменную во всех dfm от символа к фактору. Я пытался сделать это следующим образом, но безуспешно.

#different data frames:
names<-c("fa.7","fa.8","fa.9","fa.10","fa.11","fa.12","fa.13","fa.14","fa.15","fa.16","fa.18","fa.19","fa.20","fa.22","fa.28","fa.30","fa.32","fa.33","fa.36","fa.38","fa.39","fa.42","fa.43","fa.45","fa.47","fa.48","fa.52","fa.53","fa.54","fa.55","fa.56","fa.58","fa.59","fa.60","fa.63")

#Now I try to transform into a factor one column in all data frames.
for (i in names){
  df<-get(i)
  df$IID=as.factor(df$IID)
  assign(names[i],df)
}

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Похоже, вы пытаетесь присвоить фактор типа данных элементам вектора, которые изначально были символами. Я прав? Если это так, то приведенный ниже фрагмент кода делает это очень просто. Пожалуйста, дайте мне знать, если он отвечает на ваш вопрос.

names<-c("fa.7","fa.8","fa.9","fa.10","fa.11","fa.12","fa.13","fa.14","fa.15","fa.16","fa.18","fa.19","fa.20","fa.22","fa.28","fa.30","fa.32","fa.33","fa.36","fa.38","fa.39","fa.42","fa.43","fa.45","fa.47","fa.48","fa.52","fa.53","fa.54","fa.55","fa.56","fa.58","fa.59","fa.60","fa.63")
str(names)
df<-lapply(names,factor)
str(df)
0 голосов
/ 09 мая 2018

Вам нужно использовать assign(i, df), а не assign(names[i], df).

Хотя, есть гораздо лучшие способы сделать это, где вы можете избежать цикла for. Например, используйте lapply:

dfs <- list(fa.7,fa.8)
listFactorDFs <- lapply(
  dfs,
 function(i){
    i$IID <- as.factor(i$IID)
    i
  }
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...