2013-07-10 3 views
0

: 내 경우에는 더 정확하게사용하는 이름은 data.fame를 호출하고 그것에 열을 만들 수 있습니다 : 나는 같은 일을하려고 한

get(names[i])$column1<-vector 

또는, get(names[i])@data<-data.frame

내가 고민 한을 get(), assign()은 비슷한 일을 찾고 ...하지만 어떻게 알아낼 수 없습니다 그것은

예 :

names<-c("york","paris","donostia") 
vector<- 1:8 
data<- as.data.frame(matrix(rep(0,9),ncol=3)) 

어떻게하면됩니까?

답변

0

의 당신의 예를 들어 data.frame 시작하자 : 나는 당신의 질문을 이해하면

data <- as.data.frame(matrix(rep(0,9),ncol=3)) 

> data 
    V1 V2 V3 
1 0 0 0 
2 0 0 0 
3 0 0 0 

, 당신은, 열을 추가 할 수 있지만 보유 가변하여 data.frame를 참조 그렇게 할 그것의 이름.

구문 df$foo <- x는 data.frame df 열 이름 및 새로운 컬럼을 취하고 새로운 data.frame를 반환 $<-라는 함수를 적용하기위한 편리하다. 마술 부분은 원래 값인 df에서 반환 값을 다시 캡처한다는 점입니다. 나는 그것이 이상하다고 생각

name <- 'data' 
assign(name, `$<-`(get(name), 'new.column', letters[1:3])) 

> data 
    V1 V2 V3 new.column 
1 0 0 0   a 
2 0 0 0   b 
3 0 0 0   c 
+0

위대한, 그래서 쉽게 대답했다. 고맙습니다. – user2568049

0

: 염두에두고

, 여기에 내가 후하다고 생각거야. 내 문제를 단순화 한 것으로 생각하고 내 데이터에 정말로 이상한 일이 일어나고 있다고 생각합니다.

실제로 SpatialPolygonsDataFrame을 사용하고 있는데 object (object @ data) 내부의 data.frame을 바꾸려고합니다.

################ data ################ 
    library(sp) 
    grd <- GridTopology(c(1,1), c(1,1), c(3,3)) 
    polys <- as.SpatialPolygons.GridTopology(grd) 
    centroids <- getSpPPolygonsLabptSlots(polys) 
    x <- centroids[,1] 
    y <- centroids[,2] 
    z <- 1.4 + 0.1*x + 0.2*y + 0.002*x*x 
    map <- SpatialPolygonsDataFrame(polys, 
          data=data.frame(x=x, y=y, z=z,         row.names=getSpPPolygonsIDSlots(polys))) 


    ########## my case ############## 
    new.data1<-data.frame(x=x, y=y, z=z*2, row.names=getSpPPolygonsIDSlots(polys)) 
    new.data2<-data.frame(x=x, y=y, z=z/2, row.names=getSpPPolygonsIDSlots(polys)) 
    names<-c("new.data1","new.data2") 
    maps<-c("map1","map2") 

    for(i in 1:length(names)){ 
     assign(maps[i],map) ### I copy the map in each of the maps I want 

     ### and here I try to copy the new data.frames in the data slot of my maps 
     assign(maps[i],`@<-`(get(maps[i]),"data",get(names[i]))) 
    } 

    #### check 
    identical(get(maps[1]),get(maps[2])) 

나는 모든 것이 괜찮다고 생각했지만, 대신 나는 다른 맵에있는 두 data.frames이 동일한 지 가지고 :

그래서 시작은 내가 다른 사람에서 가져온 예입니다. 나는 조금 내가 행에 말하고 무엇에 열중하고 있었다 :

할당 (지도 [I], @<- (GET (지도는 [I]), "데이터", (얻을 이름 [I])))

여기에 문제가 있다고 생각합니다. 왜이 마지막 라인은 두 개의 새 맵 (map1 & map2)에 동일한 data.frame (성 [i])을 할당합니까?

많은 감사

+0

이 경우, 사용자의 로컬 환경은 "map1"과 "map2"라는 항목을 가지며 둘 다 SpatialPolygonsDataFrame에서 반환되는 것과 동일한 객체를 가리 킵니다. 두 개의 "지도"가 없으며 동일한지도의 이름은 두 개뿐입니다. – cbare

+0

당신의 목표에 대해서는 잘 모르겠지만, assign을 사용하는 것이 최선의 방법은 아닐 것입니다.일반지도 목록을 원한다고 생각합니다. – cbare

0

이 라인은 트릭을 함께 코드시겠습니까?

maps <- list() 
for (name in ['city1', 'city2', ...etc...]) { 
    data <- getDataForThisParticularMap(name) 
    maps <- append(maps, list(SpatialPolygonsDataFrame(...etc..., data=data))) 
} 

전체 목표가 다른지도 개체의 목록 인 경우 원하는대로 할 수 있습니다.

+0

예, 이것이 효과가 있다고 생각합니다. 나는 당신이 환경에 대해 지적한 것을 이해하기위한 프로그래밍 튜토리얼을 찾아야한다. 많은 많은 감사 cbare – user2568049