Ваш требуемый вывод не имеет смысла в сочетании с данным вводом (то есть columns = list(year, region )
).
Вы хотите напечатать (в соответствии с вашим требуемым выводом) out loop 'region'
, однако у вас нет регион или год в вашем списке / df. Здесь указаны только фактические значения года и региона. Это вызвано тем, как вы создаете свой список. Мне не ясно, являются ли ваши настоящие данные безымянными или действительно имеют правильное имя. Тем не менее, вы не можете распечатать что-то, чего нет в данных. Чтобы решить эту проблему, я добавил имена:
names(columns) <- c("year","region")
или просто сделал это при создании списка:
columns = list(year = year, region =region )
Когда вы теперь сделаете меня равным имени столбцов, вы получит либо год, либо регион, которые можно напечатать так, как вы указали в требуемом выводе. Однако, поскольку i теперь равно имени (а не значениям, как в вашем примере), вы не можете выбрать j в i. Ну, технически вы можете, но это не имеет смысла, потому что j будет равно i. Вместо этого вы хотите выбрать значения столбцов для списка i. Так как мы изменим обе эти вещи в ваших циклах for, вы получите:
for (i in names(columns)){
print("out loop ")
print(i)
for (j in columns[[i]]){
print("in loop ")
print(j)
}
}
Это даст:
[1] "out loop "
[1] "year"
[1] "in loop "
[1] 2018
[1] "in loop "
[1] 2019
[1] "in loop "
[1] 2020
[1] "out loop "
[1] "region"
[1] "in loop "
[1] "AMER"
[1] "in loop "
[1] "APAC"
[1] "in loop "
[1] "EMEA"
Я не знаю, почему у вас print("in loop ") print(i) print(j)
во второй l oop вашего исходного примера, так как он не соответствует требуемому выводу (а также делает print("out loop") print(i)
немного избыточным IMO). Вы все еще могли бы это сделать, но это дало бы:
[1] "out loop "
[1] "year"
[1] "in loop "
[1] "year"
[1] 2018
[1] "in loop "
[1] "year"
[1] 2019
[1] "in loop "
[1] "year"
[1] 2020
[1] "out loop "
[1] "region"
[1] "in loop "
[1] "region"
[1] "AMER"
[1] "in loop "
[1] "region"
[1] "APAC"
[1] "in loop "
[1] "region"
[1] "EMEA"
Некоторые личные предпочтения, хотя: я не знаю точно, почему вы хотите напечатать это, но для циклов относительно медленно, особенно когда вы их вкладываете или когда ваши данные становятся больше. Вы можете легко применить функцию, просто используя apply или map и записав результаты в новый столбец или назначив его как объект для среды.