我在一个文件夹中有一堆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的数据帧,而不是仅停留在第五行(同样,如果我使用&#39; endCol = 1&#39;例如,它同时给出两列)。另一方面,在基数R中传递附加参数也不是问题:
my_plot <- function(...) {
plot(...)
}
#my_plot(x=x, y=y, pch=16, col="blue")
按预期工作。上面定义的函数在xlsx文件中读取的问题是什么?感谢。
devtools :: SESSION_INFO()
会话信息------------------------------------------------ ---------------------
设定值
版本R版本3.1.1(2014-07-10)
system x86_64,darwin13.1.0
ui RStudio(0.98.1062)
语言(EN)
整理en_US.UTF-8
tz America / New_York
软件包---------------------------------------------- ---------------------------
包*版本日期来源
devtools 1.6.0.9000 2014-11-26 Github(hadley / devtools @ bd9c252)
rJava 0.9.6 2013-12-24 CRAN(R 3.1.0)
rstudioapi 0.1 2014-03-27 CRAN(R 3.1.0)
XLConnect * 0.2.9 2014-08-14 CRAN(R 3.1.1)
XLConnectJars * 0.2.9 2014-08-14 CRAN(R 3.1.1)
答案 0 :(得分:2)
点机制需要有一个需要点的函数,与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中有一些工作示例可以说明这一点。幸运的是,解析器能够以某种方式忽略没有值传递给&#39; endCol&#39;。