0

我一直在尝试做类似的事情:

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))

我怎么能这样做?

4

3 回答 3

0

我以为结束了。我想我简化了我的问题,我的数据发生了一些非常奇怪的事情。

我实际上正在使用 SpatialPolygonsDataFrame,并且我正在尝试替换对象(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.frame 是相同的。我对我在行中所说的话有点迷失了:

分配(地图[i],@<-(获取(地图[i]),“数据”,获取(名称[i])))

我认为这应该是问题所在。为什么最后一行将相同的data.frame(姓氏[i])分配给两个新地图(map1和map2)????

非常感谢

于 2013-07-11T14:18:38.973 回答
0

按照这些思路编写代码可以解决问题吗?

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

如果您的总体目标是不同地图对象的列表,这就是您想要的。

于 2013-07-11T18:56:56.773 回答
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
于 2013-07-11T01:07:18.670 回答