Как назвать переменные на лету?
можно ли создавать новые имена переменных на лету?
Я хотел бы читать фреймы данных из списка в новые переменные с номерами в конце. Что-то вроде orca1, orca2, orca3...
Если я попробую что-то вроде
paste("orca",i,sep="")=list_name[[i]]
Я получаю эту ошибку
target of assignment expands to non-language object
есть другой способ обойти это?
6 ответов:
мне кажется, что вы могли бы быть лучше со списком, а не с помощью
orca1
,orca2
и т. д... тогда это будетorca[1]
,orca[2]
, ...обычно вы составляете список переменных, отличающихся только числом, потому что это число будет удобным способом доступа к ним позже.
orca <- list() orca[1] <- "Hi" orca[2] <- 59
иначе
assign
- это именно то, что вы хотите.
Не делайте фреймы данных. Сохраните список, назовите его элементы, но не прикрепляйте его.
самая большая причина этого заключается в том, что если вы делаете переменные на ходу, почти всегда вам позже придется перебирать каждый из них, чтобы выполнить что-то полезное. Там вы снова будете вынуждены перебирать каждое из имен, которые вы создали на лету.
гораздо проще назвать элементы списка и перебирать имена.
Что касается attach, его действительно плохая практика программирования в 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
если у вас
varname <- c("a", "b", "d")
можно сделать
get(varname[1]) + 2
на
a + 2
или
assign(varname[1], 2 + 2)
на
a <- 2 + 2
таким образом, похоже, что вы используете GET, когда хотите оценить формулу, которая использует переменную (например, конкатенацию), и назначить, когда вы хотите назначить значение предварительно объявленной переменной.
синтаксис назначение: назначить(х, значение)
x: имя переменной, заданное в виде символьной строки. Принуждение не выполняется, и первый элемент символьного вектора длиной больше единицы будет использоваться с предупреждением.
значение: значение, которое будет присвоено x.