2014-10-16 2 views
0

Я пытаюсь написать функцию, которая откроет некоторые .csv-файлы и заготовку нескольких вычислений на определенных частях этих фреймов. У меня возникли проблемы с передачей имени столбца в качестве параметра в функции, и я не уверен, почему. Так что-то вроде этого (минимальный рабочий пример, моя функция является более сложной, чем это):Использование имен столбцов csv в качестве параметра в функции R

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

У меня есть .csv в моем рабочем столе под названием «test.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 

... это то, что я хочу.

Я не уверен, как моя функция отличается от того, как это делается вручную. Я могу использовать параметры функции для поиска и открытия файла, но использование параметра функции в параметре $ $, по-видимому, вызывает ошибку. Почему это? Какое обходное решение существует?

+1

Вы могли бы просто использовать кронштейн индексацию вместо индексацию '$'. Например, получите номер столбца с чем-то вроде «Idx <- match (имя столбца, имена (данные))», а затем «mean (data [, Idx])». – nrussell

+0

На самом деле я использовал это, хотя оба ответа были очень полезными! – wugology

ответ

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

+1

$ - проблема. См. Только что добавленное разъяснение. –

Смежные вопросы