2016-07-13 3 views
0

mergedColors이라는 색 목록이 있습니다. 이 색상 목록에서 for() 루프를 사용하여 각 고유 색상에 해당하는 행렬을 만듭니다. 이 시점까지는 모든 것이 잘 작동합니다. 그런 다음 처음에 루프를 작성한 후에 루프의 행렬을 변경/편집하고 계속 진행하고 싶습니다. 이 예에서는 세 번째 열의 이름을 변경하려고 시도합니다. 그러나, 나는 그 일을하는 방법에 대해 완전히 확신하지 못합니다. 내가 for() 루프 내에서 생성 된 개체 호출

colnames(paste("merged",each,sep="_"))[3] = "Temp" 

R

오류를 반환, 내가 그들을 만드는 데 사용 된 동일한 구문을 통해 전화를 할 때 : "할당의 대상이 아닌 언어 객체로 확장". 루프 내에서 방금 작성한 행렬을 어떻게 호출해야합니까?

샘플 데이터 :

mergedColors = c("red", "blue", "green", "red", "black", "blue", "blue", "green", "yellow", "red") 
table(mergedColors) 



for(each in unique(mergedColors)){ 

    assign(paste("merged",each,sep="_"), as.matrix(cbind(cars, c(each)))) 
    #colnames(paste("merged",each,sep="_"))[3] = "Temp" 

} 
+0

누군가가'get'를 사용하는 당신에게 말할거야,하지만 당신은 안된다. 돌아가서 명명 된 목록을 사용하여 모든 작업을 다시 실행해야합니다. – joran

+0

@ joran 이미'get'을 사용하여 대답이 나온 후에 그 주석을 잘 작성했습니다. –

+0

@ Hack-R 내 웹 페이지가 새로 고침이 안되었습니다. 보지 못했습니다. – joran

답변

2

당신은 당신이 붙여있는 것은 객체 참조되는 R에게 get을 사용해야합니다. 이처럼

:

tmp <- get(paste("merged",each,sep="_")) 
colnames(tmp)[3] = "Temp" 

> head(tmp) 
    speed dist Temp  
[1,] " 4" " 2" "yellow" 
[2,] " 4" " 10" "yellow" 
[3,] " 7" " 4" "yellow" 
[4,] " 7" " 22" "yellow" 
[5,] " 8" " 16" "yellow" 
[6,] " 9" " 10" "yellow" 

이 여기에 전체 루프입니다 :

for(each in unique(mergedColors)){ 

    assign(paste("merged",each,sep="_"), as.matrix(cbind(cars, c(each)))) 
    #colnames(paste("merged",each,sep="_"))[3] = "Temp" 
    tmp <- get(paste("merged",each,sep="_")) 
    colnames(tmp)[3] = "Temp" 
    assign(paste("merged",each,sep="_"), tmp) 

} 
+0

하지만 그걸로 당신은 새로운 매트릭스를 만들 수 있다고 생각합니다. 그것은 actuel 매트릭스의 이름을 바꾸지 않습니까? 아니면 틀린가요? – Alex

+0

@Alex Right, 그래서 당신이 그것을 덮어 쓰기 전에했던 것처럼'assign' 연산을 실행할 필요가 있습니다. 전체 루프를 추가하여 보여 드리겠습니다. –

+0

또한보십시오 : http://stackoverflow.com/questions/14464442/using-get-with-replacement-functions – Alex