【问题标题】:Does get() retrieve the actual object? [duplicate]get() 是否检索实际对象? [复制]
【发布时间】:2014-03-11 20:25:41
【问题描述】:

谁能解释下面的行为?

df <- data.frame(dog = 1:5)

colnames(df) <- "cat" # This works
colnames( get('df') ) <- "cat" # error
colnames( eval(parse(text='df')) ) <- "cat" # error

错误是

Error in colnames(get("df")) <- "cat" : 
target of assignment expands to non-language object

【问题讨论】:

  • df 是标准函数;您的代码掩盖了它的定义; df 不是全局变量的好名字。
  • 啊在小屏幕上工作的问题!感谢@Thomas 的链接

标签: r


【解决方案1】:

get 检索实际对象,但这不是代码不起作用的原因。

注意

x <- get('df')
colnames(x) <- 'cat'

确实有效,但那

get('df') <- 34

sqrt(4) <- 2

不工作。

它们不起作用的原因是 R 评估事物的顺序 (see here for the actual C code that produced the error)。 R 将 colnames(x) 扩展为

get('df') <- `colnames<-`(x, y)

这是无效的,例如get('df') &lt;- 34sqrt(4),因为您不能将函数调用的结果赋值给值。

【讨论】:

    【解决方案2】:

    请使用assign

    assign(names(eval(as.name("df"))), "cat")
    

    parse(text='df') 不起作用的原因是因为它返回一个由 eval 评估的表达式,对于问题,请参阅@Thomas 链接到的答案!

    【讨论】:

    • 这与手头的问题无关
    • 我想我在试图帮助 OP 设置名称时被冲昏了头脑!
    猜你喜欢
    • 2013-09-25
    • 2012-04-27
    • 2014-07-02
    • 2023-04-06
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    相关资源
    最近更新 更多