2016-06-13 36 views
1

我想命名数据框的列,但数据框是动态选择的。任何想法为什么这不起作用?下面是一个例子,但在我的真实情况下,我得到了一个不同的错误。截至目前,我只是想知道是什么原因导致无论是错误的:动态选择数据的名称列。框架

错误的文件(文件名,“R”):无法打开连接
另外:警告消息:
在文件(文件名,“R”):
无法打开文件“DF”:没有这样的文件或目录

#ASSIGN data frame name dynamically 
> assign(as.character("df"), data.frame(c(1:10), c(11:20))) 
> 
#IT WOrked 
> df 
    c.1.10. c.11.20. 
1  1  11 
2  2  12 
3  3  13 
4  4  14 
5  5  15 
6  6  16 
7  7  17 
8  8  18 
9  9  19 
10  10  20 
> 
#Call the data frame dynamically, it works 
> eval(parse(text = c("df"))) 
    c.1.10. c.11.20. 
1  1  11 
2  2  12 
3  3  13 
4  4  14 
5  5  15 
6  6  16 
7  7  17 
8  8  18 
9  9  19 
10  10  20 
> 
#name the columns 
> colnames(df) <- c("a", "b") 
> df 
    a b 
1 1 11 
2 2 12 
3 3 13 
4 4 14 
5 5 15 
6 6 16 
7 7 17 
8 8 18 
9 9 19 
10 10 20 
> 
#name columns of dynamically chosen data frame, returns and error 
> colnames(eval(parse(text = c("df")))) <- c("c", "d") 
    Error in colnames(eval(parse(text = c("df")))) <- c("c", "d") : 
    target of assignment expands to non-language object 

回答

14

它不起作用,因为R不希望你使用assign和(哎呀! )这种排序的eval(parse())基本的东西。列表!这就是主创造名单的原因!

l <- list() 
l[["df"]] <- data.frame(c(1:10), c(11:20)) 
colnames(l[["df"]]) <- c("a","b") 
> l 
$df 
    a b 
1 1 11 
2 2 12 
3 3 13 
4 4 14 
5 5 15 
6 6 16 
7 7 17 
8 8 18 
9 9 19 
10 10 20 
+6

主,你的意思是 –

+1

但但但'setNames(EVAL(as.name( “DF”)),C( “A”, “B”))' –

+0

感谢我“会记住这心神。 – user3385769