Я пытаюсь прочитать файл, передав параметр функции в R. Тот же синтаксис работает вне функции, но не в ней.

> corr <- function(directory){
z <- sprintf("C:\\Users\\rajat\\Documents\\education\\Coursera\\Computing for Data  Analysis\\%s\\001.csv",directory)
print(z)
data2<-read.csv(z)
}
corr(directory="specdata")
[1] "C:\\Users\\rajat\\Documents\\education\\Coursera\\Computing for Data Analysis\\specdata\\001.csv"
> data2
> Error: object 'data2' not found

Тот, который не использует функцию, дает правильный результат.

  > directory="specdata"
  > z <- sprintf("C:\\Users\\rajat\\Documents\\education\\Coursera\\Computing for Data Analysis\\%s\\001.csv",directory)
  > print(z)
  [1] "C:\\Users\\rajat\\Documents\\education\\Coursera\\Computing for Data Analysis\\specdata\\001.csv"
  > data1<-read.csv(z)

  > str(data1)
  'data.frame': 1461 obs. of  4 variables:
  $ Date   : Factor w/ 1461 levels "2003-01-01","2003-01-02",..: 1 2 3 4 5 6 7 8 9 10 ...
r
0
Rajat Panda 20 Янв 2014 в 05:52

1 ответ

Лучший ответ

data2 просто существует в среде вашей функции corr. Чтобы сделать его глобально доступным, сделайте data2<<-read.csv(z). Тогда он будет найден вне функции. Дополнительная информация: http: //stat.ethz. ch / R-manual / R-patched / library / base / html / assignOps.html

Заявление об ограничении ответственности : более понятным способом было бы вернуть данные из функции следующим образом:

corr <- function(directory) {
  z <- sprintf("C:\\Users\\rajat\\Documents\\education\\Coursera\\Computing for Data  Analysis\\%s\\001.csv",directory)
  print(z)
  return(read.csv(z))
}

data2 <- corr(directory="specdata")
data2

См. Комментарий @ thelatemail ниже.

2
lukeA 20 Янв 2014 в 06:05
Это плохой совет. Вам следует по возможности избегать <<-. Вместо этого функция corr должна возвращать read.csv(z), который затем можно назначить для data2 с помощью стандартного <-
 – 
thelatemail
20 Янв 2014 в 05:58
Нет, пры нет. Это было проще всего. :)
 – 
lukeA
20 Янв 2014 в 06:00
Учитывая, что кажется, что Раджат изучает курс Coursera по R, вероятно, будет разумным хотя бы заявить об отказе от ответственности.
 – 
thelatemail
20 Янв 2014 в 06:02
Спасибо вам обоим!! :) Я сделал это следующим образом ... read.csv (z) return () Поскольку я не хочу, чтобы весь набор данных печатался в моей консоли, что, как мне кажется, делает следующая команда. возврат (read.csv (z))
 – 
Rajat Panda
20 Янв 2014 в 06:18