2014-10-16 71 views
0

我在編寫一個函數,它將打開一些.csv文件並對這些數據幀的特定部分執行幾個計算。我在傳遞列名作爲函數中的參數時遇到問題,我不知道爲什麼。因此,像這樣(最小的工作例如,我的功能比這更復雜):在R函數中使用csv列名作爲參數

MyFunction <- function(file, columnname){ 
    data <- read.table(file,sep=",",header=TRUE); 
    mean(data$columnname); 
    } 

我在我的桌面上名爲「test.csv」的.csv,和所有它裏面有一個叫列「數字」和數字1:10。如果我運行這些:

MyFunction("~/Desktop/test.csv",numbers) 
MyFunction("~/Desktop/test.csv","numbers") 

我得到這個錯誤:

[1] NA 
Warning message: 
In mean.default(data$columnname) : 
    argument is not numeric or logical: returning NA 

但是,如果我運行此:

data <- read.table("~/Desktop/test.csv",sep=",",header=TRUE); 
mean(data$numbers); 

我得到這個:

[1] 5.5 

......這是我想要的。

我不知道我的功能是如何在這裏手工完成的。我可以使用函數參數來查找和打開文件,但使用data $參數中的函數參數似乎會導致錯誤。爲什麼是這樣?有什麼解決方法?

+1

你可能只是'$'使用支架的索引,而不是索引。例如,使用'Idx < - match(columnname,names(data))'然後'mean(data [,Idx])'來獲取列號。 – nrussell 2014-10-16 21:52:33

+0

我真的結束了使用這個,雖然這兩個答案都非常有幫助! – wugology 2014-10-16 22:27:52

回答

3

試試這個:

MyFunction <- function(file, columnname) { 
    data <- read.csv(file) 
    mean(data[[columnname]]) 
} 

注:

b <- "a" 
DF <- data.frame(a = 1, b = 2) 
DF$b 
## [1] 2 
DF[[b]] 
## [1] 1 
+0

太棒了,謝謝!是我的問題使用read.table或$或兩者? – wugology 2014-10-16 22:18:39

+1

$是問題所在。請參閱剛剛添加的說明。 – 2014-10-16 22:22:13