Присвоение динамически созданному вектору

Как мне назначить динамически создаваемый вектор?

master<-c("bob","ed","frank")
d<-seq(1:10)
for (i in 1:length(master)){
  assign(master[i], d )
}

eval(parse(text=master[2]))[2] # I can access the data

#   but how can I assign to it THIS RETURNS AN ERROR     #######################
eval(parse(text=master[2]))[2]<- 900

1 ответ

Решение

ХОРОШО. Я выложу этот код, но только потому, что меня попросили:

> eval(parse(text=paste0( master[2], "[2]<- 900" ) ) )
> ed
 [1]   1 900   3   4   5   6   7   8   9  10

Обычно считается плохой практикой использовать такой метод. Вам нужно построить выражение ed[2] < 100, С помощью paste0 позволяет оценить мастер [2] как 'ed' который затем соединяется с остальными символами, прежде чем перейти к parse для преобразования в языковой объект. Это будет больше соответствовать тому, что считается лучшей практикой:

master<-c("bob","ed","frank")
d<-seq(1:10)
mlist <- setNames( lapply(seq_along(master), function(x) {d} ), master)

Таким образом, изменение второго значения второго элемента с <-:

> mlist[[2]][2] <- 900
> mlist[['ed']]
 [1]   1 900   3   4   5   6   7   8   9  10
Другие вопросы по тегам