2014-12-01 2 views
0

어떻게 동적으로 생성 된 벡터에 할당합니까?동적으로 생성 된 벡터에 할당

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 
+0

사용'(마스터 [2])'평가를 사용하는 것은 일반적으로 부족의 증거로 볼 수. knowlege하지만 정말로 원한다면 다음을 시도해보십시오 :'eval (as.name (maste r [2]))'. 데이터 객체와 언어 객체 사이에는 구분이 있습니다. 그래서'get'와'as.name'은 문자 객체의 상태를 언어 객체에 "승격"시키는 것으로 생각할 수 있습니다. –

+0

@Bonded get (master [2]) [2] <- 900 오류를 반환합니다. – user3022875

+0

원하는 결과를 찾을 수 없습니다. 왜 할당하지 않으려 고하는 것보다 .... 할당? –

답변

0

확인. 나는이 코드를 게시 할 것입니다. 왜냐하면 오직 다음과 같이 요청했기 때문입니다.

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

일반적으로 이러한 방법을 사용하는 것은 나쁜 습관으로 간주됩니다. ed[2] < 100이라는 표현식을 만들어야하는데 paste0을 사용하면 master [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 
+0

가장 좋은 방법은 무엇입니까? – user3022875

관련 문제