首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R、R编程、循环目录

R、R编程、循环目录
EN

Stack Overflow用户
提问于 2013-07-23 03:19:28
回答 2查看 181关注 0票数 0

您好,我正在尝试循环通过一个目录的excel文件进行分析。

我的变量名为FileToGrab,它获取excel文件的名称。

我用粗体显示的FileToGrab是我想要命名的数据帧,而不是实际的FileToGrab数据帧。

示例FileToGrab = 2013ExcelSheet23

我希望我的数据框命名为2013ExcelSheet23,而不是FileToGrab。

FileToGrab = 2013ExcelSheet24

我希望将我的数据框命名为2013ExcelSheet24,而不是FileToGrab。

FileToGrab = 2013ExcelSheet25

我希望我的数据框命名为2013ExcelSheet25,而不是FileToGrab。

.诸若此类。

R新手,如果这没有意义,很抱歉。谢谢

代码语言:javascript
复制
x <- 1:50
for(i in seq(along=x))
{


FileToGrab  = gsub("(^ +)|( +$)", "",listofFile[i])
FileToGrab  = str_replace_all(string=FileToGrab, pattern=" ", repl="")

DirFileName = paste("C:\\Users\\w47593\\Desktop\\RProjects\\CallCenterProjectJuly2013\\Files\\",FileToGrab)
DirFileName = str_replace_all(string=DirFileName, pattern=" ", repl="")

file.name <- DirFileName 
sheet.name <- "Detail"
FileToGrab = str_replace_all(string=FileToGrab, pattern=".xls", repl="")


## Connect to Excel File Pull and Format Data
excel.connect <- odbcConnectExcel(DirFileName)
**FileToGrab**  <- sqlFetch(excel.connect, sheet.name, na.strings=c("","-"))
odbcClose(excel.connect)


}
EN

回答 2

Stack Overflow用户

发布于 2013-07-23 04:11:07

你可能不想命名你的对象以数字开头,因为你每次使用它们时都要用引号将它们引起来

代码语言:javascript
复制
> 11Foo <- 1
Error: unexpected symbol in "11Foo"
> `11Foo` <- 1
> 11Foo
Error: unexpected symbol in "11Foo"
> `11Foo`
[1] 1

像wise一样,我怀疑您是否希望25+对象阻塞您的工作区。更好的解决方案通常是将数据导入列表并使用这些对象。您在访问这些名称时也遇到了类似的问题

代码语言:javascript
复制
> ll <- list(`1` = 1, `2` = 2)
> ll$1
Error: unexpected numeric constant in "ll$1"
> ll$`1`
[1] 1

但是这样你就不需要用名字来引用它们了,而且你可以使用lapply等遍历列表,这对你有好处。

我会使用像这样的东西

代码语言:javascript
复制
fs <- list.file("dir/to/excel/files", glob2rx("*.xls"))
ll <- vector(mode = "list", length = length(fs))

for (i in seq_along(ll)) {
  excel.connect <- odbcConnectExcel(fs[i])
  ll[[i]] <- sqlFetch(excel.connect, sheet.name, na.strings=c("","-"))
  odbcClose(excel.connect)
}

names(ll) <- sub("\\.xls", "", fs)

您仍然需要通过

代码语言:javascript
复制
ll$"2013ExcelSheet25"

但是您也可以使用

代码语言:javascript
复制
ll[["2013ExcelSheet25"]]

或者更好

代码语言:javascript
复制
ll[[1]]

甚至是

代码语言:javascript
复制
ll[[which(names(ll) == "2013ExcelSheet25")]]

但是因为这些都包含在一个单独的列表中,所以您可以通过lapply和co对它们进行操作。

票数 3
EN

Stack Overflow用户

发布于 2013-07-23 03:59:52

为什么不使用

代码语言:javascript
复制
files = list.files(DirFileName)

然后迭代将它们加载到R中?

使用文件名为对象赋值:

代码语言:javascript
复制
objects = list()
objects[[files[1]]] = ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17795657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档