Учитывая это:
vec1 = 1:10
varname = "vec1"
Я знаю, что могу сделать это:
eval(parse(text=paste0(varname,"[5] = 20")))
Я хочу найти что-нибудь чище, если это возможно. Я попробовал это:
`<-`(`[`(as.name(varname), 5), 20)
Но я получаю сообщение об ошибке: «объект типа 'symbol' не является поднабором".
Что-то очень похожее работает работает:
`<-`(`[`(vec1, 5), 20)
Почему vec1
трактуется иначе, чем as.name("vec1")
при передаче в качестве первого аргумента функции [
?
Если я попробую это:
`<-`(`[`(as.name("vec1"), 5), 20)
Я получаю совершенно другую ошибку: «цель назначения расширяется до неязыкового объекта».
Может кто-нибудь объяснить нюансы, связанные с этим? И есть ли более чистые способы делать то, что я хочу, сохраняя при этом vec1 как простую, автономную переменную верхнего уровня? Реальный сценарий в этом случае более сложный, и у меня уже есть обходной путь; Я прошу этого больше, чтобы понять основы того, что возможно, а что невозможно с R.