我是一个学生,有基本的R编程类和任务之一是创建一个自定义函数命名为sizeReport(),它有给定的参数:
- path:目录的路径(字符串),
- patt:过滤报告的文件/目录的正则表达式(regex、string),默认为“.*",
- dironly:逻辑值(布尔型),用于切换是报告所有文件还是仅报告目录,默认值为FALSE,
- level:指定递归深度(整数),默认为Inf.
下面是一个典型的基本函数调用,在这个调用中,我们只使用path参数,并以关系方式指定目录的路径(您也可以使用直接路径,例如文件夹)。其他参数采用默认值,例如level = Inf,这将导致目录的完整搜索(列出目录、所有子目录等中的所有项),patt =“.*”,因此列出所有项,以及dironly = FALSE,因此列出所有项而不仅仅是目录。
path size
1 ../ 13849765
2 ..//cars.csv 12536233
3 ..//projekt-1 33789
6 ..//projekt-1/project.html 25164
7 ..//projekt-1/project.org 8625
8 ..//projekt-1/test 0
4 ..//projekt-2 1041209
9 ..//projekt-2/A-List-Of-Epidemics_examples.nb 823182
10 ..//projekt-2/disease_data.csv 9109
11 ..//projekt-2/event_data.csv 165
12 ..//projekt-2/fig1.png 9954
13 ..//projekt-2/fig2.png 27818
14 ..//projekt-2/fig3.png 21237
15 ..//projekt-2/fig4.png 16929
16 ..//projekt-2/fig5.png 24854
17 ..//projekt-2/fig6.png 24854
18 ..//projekt-2/fig7.png 19974
19 ..//projekt-2/project.html 18842
20 ..//projekt-2/project.html~ 18392
21 ..//projekt-2/project.org 15587
22 ..//projekt-2/project.org~ 10312
5 ..//projekt-3 238534
23 ..//projekt-3/analiza.nb 1780
24 ..//projekt-3/fig_1.png 32498
25 ..//projekt-3/fig_2.png 72864
26 ..//projekt-3/fig_3.png 90707
27 ..//projekt-3/project.html 14314
28 ..//projekt-3/project.html~ 14313
29 ..//projekt-3/project.org 6648
30 ..//projekt-3/project.org~ 5410
下一个例子和上面的调用是一样的,但是路径是以绝对的方式给出的。显示的宽度由于路径的长度而改变。但是,除此之外,结果是相同的。在进一步的例子中,我将把自己限制在与工作目录相关的路径上。
我试着写这个代码:
sizeReport <- function(path, patt = ".*", dironly = FALSE, level = Inf) {
files <- data.frame(name = character(), size = numeric())
walkDir <- function(path, level) {
filesInDir <- list.files(path, recursive = FALSE)
for (file in filesInDir) {
fullPath <- file.path(path, file)
if (dironly && !dir.exists(fullPath)) {
next
}
if (dir.exists(fullPath) && level > 0) {
walkDir(fullPath, level - 1)
} else {
if (!dir.exists(fullPath) && grepl(patt, file)) {
files <- rbind(files, data.frame(name = fullPath, size = file.size(fullPath)))
}
}
}
}
walkDir(path, level)
return(files)
}
sizeReport("../")
filesInDir <- list.files("../", recursive = FALSE)
filesInDir
但它不起作用。当使用
sizeReport(path = "../")
它只显示了这一点:
[1] name size
<0 rows> (or 'row.names' with 0 length)
当我使用代码的filesInDir位时:
filesInDir <- list.files(path, recursive = FALSE)
它以矢量形式显示文件名:
[1] "fUNKCJA JAKAS TAM.R" "Labirynt"
[3] "Mapa.r" "sizeReport"
[5] "Zrzut ekranu 2022-12-13 232400.png"
所以把它们加载到dataframe中应该没有任何问题。我做错了什么?
1条答案
按热度按时间aiazj4mn1#
欢迎来到stackoverflow。
您需要在行中使用超级赋值
<<-
,而不是赋值运算符<-
在我看来,对于常规赋值,
R
在每次迭代中创建一个新的局部变量,该变量对于其他函数调用是不可见的。