get()是否检索实际对象?

时间:2014-03-11 20:25:41

标签: r

有人可以解释下面的行为吗?

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

2 个答案:

答案 0 :(得分: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') <- 34sqrt(4),因为您无法将函数调用的结果赋值给。

答案 1 :(得分:-1)

请使用assign

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

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