Есть ли способ динамически использовать уже созданные переменные внутри цикла for? - PullRequest
0 голосов
/ 26 июня 2019

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

Я нашел в Интернете способ создания новых переменных в цикле, но я не могу выполнять операции с другими переменными, которые были созданы ранее.Я пробовал с функциями вставки и создания переменной с циклом for.Кто-нибудь имеет представление о том, как я мог бы обрабатывать это уже созданные переменные в цикле?

Вот как это можно сделать вручную.

ACE1_dropc = umxModify(ACE1, update = "c_r1c1", name = "AE")

ACE2_dropc = umxModify(ACE2, update = "c_r1c1", name = "AE")

ACE3_dropc = umxModify(ACE3, update = "c_r1c1", name = "AE") 

Используя следующий цикл, переменныесозданы, но все они вызывают один и тот же аргумент ACE1 в функции umxMofidy (ACE1 - это уже созданная переменная класса S4).Я хочу использовать разные переменные (ACE1, ACE2, ACE3) в каждой итерации, но когда я пытаюсь использовать paste0("ACE",i), это не работает.

for(i in 1:3){
  assign(paste("ACE", i, "_dropc", sep = ""), umxModify(ACE1, update = "c_r1c1", name = "AE") )    
}

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Я не уверен, что такое umxModify, но я бы определенно перешел на list. В приведенном ниже примере я назначаю случайные числа в список l, а затем вычисляю их абсолютные значения. Обратите внимание, что все элементы списка названы и могут быть доступны по l[[paste0("iteration", i)]].

l <- list()

for(i in 1:3){
  l[[paste0("iteration_", i)]] <- rnorm(1)
}

lapply(l, abs)
0 голосов
/ 26 июня 2019

Вы можете получить переменную по ее имени, используя get(), хотя обычно рекомендуется использовать списки или другую структуру данных.Например,

a1 = 1
z = get(paste0("a",1))
print(z)
1

В вашем цикле вы должны изменить 1 на i -> get(paste0("ACE",i))

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