【问题标题】:Error in assign - invalid first argument分配错误 - 第一个参数无效
【发布时间】:2013-11-28 08:42:09
【问题描述】:

我正在尝试创建一个新的数据框列并在 for 循环中为其分配值。

具体来说,我有一个数据框名称列表,我正在一个一个地循环这个列表。对于每个名称,我想为该数据框创建一个列$location,并且我想为其分配一个值。为简单起见,假设我想分配它NA。下面的代码解释了我正在尝试做的事情。但是,当我运行它时,我收到错误Error in assign(get(name)$location, NA) : invalid first argument

names<-c("europe", "africa", "asia")
# where each of the strings in `names` is the name of an existing data frame object
# for sake of example, code is provided below to create example data frame objects

x <- c(2,6,7)
y <- c(40, 42, 14)
europe <- data.frame(x,y)
africa <- data.frame(x,y)
asia <- data.frame(x,y)

for (name in names) {
  assign(get(name)$location, NA)
}

我的目标是在我的每个数据框中获得一个名为 location 的新列。我不知道如何纠正这个或为什么会发生。任何帮助将不胜感激。

【问题讨论】:

    标签: r


    【解决方案1】:

    如果您尝试您的代码,我会收到 Error in get(name) : object 'europe' not found
    所以我不能添加一列甚至不是对象的东西。 我会尝试类似的方法

    for (k in length(names)) {
      location <- c(data1, data2)
      assign(names[k], location)
    }
    

    然后转换成你想要的格式,这样as.data.frame 之后就可以工作了

    编辑:稍微玩一下(并思考),您似乎无法像这样更改列值。从帮助页面Assign a value to a name in an environment. 这不是您要实现的目标,要更改列的值,我会将rbind 此列更改为数据或subs

    【讨论】:

    • 数据框在我的工作空间中已经有价值了……我把名字留在里面是为了展示我想要做什么。我将编辑我的问题以添加代码以创建欧洲数据框。
    【解决方案2】:
    for (k in names) {
        assign(names[k], cbind(names[k], data.frame(location = NA)))
    }
    

    【讨论】:

    • 请为您的代码提供更多信息,以帮助 SO 用户。
    猜你喜欢
    • 2017-06-03
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多