Ответ 1
Использовать назначение:
assign(paste("orca",i,sep=""), list_name[[i]])
Можно ли создавать новые имена переменных на лету?
Я хотел бы прочитать кадры данных из списка в новые переменные с номерами в конце. Что-то вроде orca1, orca2, orca3...
Если я попробую что-то вроде
paste("orca",i,sep="")=list_name[[i]]
Я получаю эту ошибку
target of assignment expands to non-language object
Есть ли другой способ?
Использовать назначение:
assign(paste("orca",i,sep=""), list_name[[i]])
Мне кажется, что вам может быть лучше со списком, а не с помощью orca1
, orca2
и т.д.... тогда это будет orca[1]
, orca[2]
,...
Обычно вы делаете список переменных, дифференцированных ничем, кроме числа, потому что это число будет удобным способом доступа к ним позже.
orca <- list()
orca[1] <- "Hi"
orca[2] <- 59
В противном случае assign
- это то, что вы хотите.
Не создавайте фреймы данных. Сохраните список, назовите его элементы, но не присоедините его.
Самая большая причина этого в том, что если вы делаете переменные на ходу, почти всегда вам придется перебирать каждую из них, чтобы выполнить что-то полезное. Там вам снова придется перебирать каждое из имен, которые вы создали на лету.
Намного легче назвать элементы списка и перебрать имена.
Что касается приложения, то это очень плохая практика программирования в R и может привести к большим проблемам, если вы не будете осторожны.
Еще одно сложное решение - назвать элементы списка и attach
it:
list_name = list(
head(iris),
head(swiss),
head(airquality)
)
names(list_name) <- paste("orca", seq_along(list_name), sep="")
attach(list_name)
orca1
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.1 3.5 1.4 0.2 setosa
# 2 4.9 3.0 1.4 0.2 setosa
# 3 4.7 3.2 1.3 0.2 setosa
# 4 4.6 3.1 1.5 0.2 setosa
# 5 5.0 3.6 1.4 0.2 setosa
# 6 5.4 3.9 1.7 0.4 setosa
И эта опция?
list_name<-list()
for(i in 1:100){
paste("orca",i,sep="")->list_name[[i]]
}
Он отлично работает. В приведенном примере первая строка отсутствует, а затем появляется сообщение об ошибке.