有人可以解释下面的行为吗?
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
答案 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') <- 34
或sqrt(4)
,因为您无法将函数调用的结果赋值给。
答案 1 :(得分:-1)
请使用assign
assign(names(eval(as.name("df"))), "cat")
parse(text='df')
不起作用的原因是因为它返回一个由eval评估的表达式,对于deails,请查看@Thomas链接到的答案!