Передача аргументов функциям xlconnect с многоточием

У меня есть куча файлов excel в одной папке, и я хотел бы написать одну функцию следующим образом:

# takes a file path and sheetname for an excel workbook, passes on additional params
getxl_sheet <- function(wb_path, sheetname, ...) {
  testbook <- XLConnect::loadWorkbook(wb_path)
  XLConnect::readWorksheet(testbook, sheet = sheetname, ...)
}  

Однако, когда я запускаю следующее,

set.seed(31415)
x <- rnorm(15); y <- rnorm(15)
randvals <- data.frame(x=x, y=y)
XLConnect::writeWorksheetToFile("~/temp_rands.xlsx", randvals, "Sheet1")
my_vals <- getxl_sheet("~/temp_rands.xlsx", "Sheet1", endRow=5)

my_vals возвращает весь кадр данных 15 на 2, а не просто останавливается на пятой строке (аналогично, если я использую, например, «endCol = 1», он дает оба столбца). С другой стороны, передача дополнительных аргументов в базе R не была проблемой:

my_plot <- function(...) {
  plot(...)
}
#my_plot(x=x, y=y, pch=16, col="blue")

работает как положено. В чем проблема с функцией, определенной выше, для чтения файлов xlsx? Спасибо.

devtools::session_info() Информация о сеансе--------------------------------------------------------- --------------------------- значение параметра
версия R версия 3.1.1 (10.07.2014) система x86_64, darwin13. 1.0
ui RStudio (0.98.1062)
язык (EN)
сопоставить en_US.UTF-8
tz America/New_York

Пакеты------------------------------------------------- ------------------------ пакет * версия дата источник
devtools 1.6.0.9000 26 ноября 2014 г. Github (hadley/devtools@bd9c252) rJava 0.9.6 24 декабря 2013 г. CRAN (R 3.1.0)
rstudioapi 0.1 27 марта 2014 г. CRAN (R 3.1.0)
XLConnect * 0.2.9 14 августа 2014 г. 1)
XLConnectJars * 0.2.9 14 августа 2014 г. CRAN (R 3.1.1)


person nabilabd    schedule 27.11.2014    source источник
comment
Посмотрите код функции или раздел использования на странице справки. readWorksheet не имеет механизма обработки ...   -  person IRTFM    schedule 27.11.2014


Ответы (1)


Механизм точек должен иметь функцию, которая ожидает точки, и, в отличие от plot.default, readWorksheet не предназначен для обработки многоточия: вам нужно встроить некоторое декодирование в аргументы:

getxl_sheetRCshort <- function(wb_path, sheetname, ...) {
  arglist <- list(...)
  testbook <- loadWorkbook(wb_path);
  readWorksheet(testbook, sheet = sheetname, 
                endRow=arglist[['endRow']], endCol=arglist[['endCol']])
}

> my_vals <- getxl_sheet("~/temp_rands.xlsx", "Sheet1", endRow=5)
> my_vals
           x           y
1  1.6470129 -1.27323204
2 -1.1119872 -1.77141948
3 -1.5485456  1.40846809
4 -0.7483785 -0.09450125

Вы можете сделать это еще более общим, выполнив сопоставление всего списка formals() из функции readWorksheet, и в SO есть рабочие примеры, иллюстрирующие это. К счастью, синтаксический анализатор каким-то образом может игнорировать тот факт, что в 'endCol' не передается никакого значения.

person IRTFM    schedule 27.11.2014