2015-02-05 2 views
0

함수의 결과를 새로 생성 된 변수에 할당하는 루프를 만들었습니다. 그 변수는 다른 변수를 생성하는 데 사용됩니다. 이 두 번째 단계는 예상 된 결과를 생성하지 못합니다.R 새로운 변수 할당

library(stringr) 
for (i in 1:length(Ids)){ 
    nam <- paste("data", Ids[i], sep = "_") 
    assign(nam, GetReportData(query, token,paginate_query = F)) 
    newvar=paste(nam,"contentid",sep="$") 
    originStr=paste(nam,"pagePath",sep="$") 
    assign(newvar,str_extract(originStr,"&id=[0-9]+")) 
} 
+0

* 정말로 *하려고합니까? 'assign()'을 사용하는 것은 일반적으로 필요하지 않습니다. 환경에서 변수를 분리하는 대신 관련 값을 목록에 저장하는 것이 거의 항상 좋습니다. 게다가, 할당은 할당 방법을 디스패치하지 않으므로 벡터, 이름, 속성 등의 요소를 설정하는 데 사용할 수 없습니다. 도움말 페이지에서 설명한대로 "$"가있는 이름으로 할당을 사용할 수 없습니다. – MrFlick

답변

3

많은 변수를 만들지 말고 관련 값을 이름있는 목록에 저장하여 쉽게 검색 할 수 있도록하십시오. 테스트 할 입력을 제공하지 않았지만, 같은 것을하는 것으로 추측합니다.

library(stringr) 
mydata <- lapply(1:length(Ids), function(i) { 
    dd <- GetReportData(query, token,paginate_query = F)) 
    dd$contentid <- str_extract(d$pagePath,"&id=[0-9]+")) 
    dd 
}) 

이렇게하면 data.frames 목록이 반환됩니다. 당신은 mydata[[1]], mydata[[2]]으로 액세스 할 수 있습니다 등보다는 data_1, data_2

당신은 절대적 변수의 무리를 만드는 방법에 대한 주장, 그냥 실제 객체에 대한 모든 변환을 할 수 있는지 확인하고 해당 개체를 저장 너 끝나면. 도움말 페이지에 설명 된대로 $ 또는 [의 이름을 가진 assign을 사용할 수 없습니다 : "할당은 할당 메소드를 전달하지 않으므로 벡터, 이름, 속성 등의 요소를 설정하는 데 사용할 수 없습니다." 예를 들어

for(i in 1:length(Ids)) { 
    dd <- GetReportData(query, token,paginate_query = F)) 
    dd$contentid <- str_extract(d$pagePath,"&id=[0-9]+")) 
    assign(paste("data",i,sep="_"), dd) 
}