通过get()函数

时间:2015-08-02 11:43:53

标签: r get character subset assign

这是assign函数的帮助页面中的示例:

> a <- 1:4
> assign("a[1]", 2)
> a[1] == 2          # FALSE
> get("a[1]") == 2   # TRUE

我希望能覆盖对象a[1]的第一个成员,而不是创建一个全新的对象a。我试过这个:

> get("a")[1] <- 2
Error in get("a")[1] <- 2 : 
  target of assignment expands to non-language object

但它没有用。我希望get() <-是一个有效的表达方式,但事实并非如此。有没有替代方案呢?

我想做的是:

我有很多对象(数据框):x11 x12 x13 x21 x22 x23 x31。 ..(其中近20个)。所有这些对象都包含30年的每日数据。它们是使用:

创建的
> for(i in c("x11", "x12", "x13", ...)) {
>   assign(i, read.csv())}

现在,我尝试使用以下代码处理我的数据:

> for(i in c("x11", "x12", "x13", ...)) {
>   for(j in 1:n) {
>     get(i)[j] <- "some.input"}}

它给了我这个信息:

Error in get("x11")[] <- "some.input" : 
  target of assignment expands to non-language object

我希望,我面临的问题是可以理解的。

1 个答案:

答案 0 :(得分:0)

同意David的上述评论,您可以使用数据框列表来执行此操作。您的创建代码如下所示:

df_list <- lapply(c("x11", "x12", "x13", ...), function(i) {
   read.csv(...)
})

和您的修改代码:

for(i in 1:length(df_list)) {
   for(j in 1:n) {
        df.list[[i]][j] <- "some.input"}}