2016-06-13 35 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