对特定API的函数调用返回目录列表。我的函数调用如下所示:
dir_listing('folder_name')
我能够将结果强制转换为data.frame
,它看起来像这样:
name is_folder
foo TRUE
bar FALSE
我希望能够为我的函数添加一个选项,允许递归列出所有子文件夹和文件。像dir_listing('folder_name', recursive = TRUE)
如果我在根文件夹上运行dir_listing()
,我可以使用以下内容对目录结果进行子集化:
result <- dir_listing('root_folder')
folders_in_result <- subset(result, is_folder==TRUE)
然后我可以将folders_in_result
中的每个名称推送到dir_listing()
。然后我必须看看每一个,看看他们是否有任何文件夹。什么是实现此操作的有效方法,以便我可以在给定文件夹下递归搜索所有文件和文件夹的最终data.frame
,直到找不到更多子文件夹或文件?
编辑:问题完全重写为清晰起见。
答案 0 :(得分:1)
你的意思并不清楚,因为result[result$is_collection,]
并不是真的。如果要将列传递给函数,则只需将向量发送给result$is_collection
或更好result[["is_collection"]]
,因为第二种形式可以更好地将参数作为名称或值传递。如果您想一次发送一行,请发送result[result$name=="foo",]
和result[result$name=="bar", ]
或以编程方式使用sapply
(或lapply
)来执行此操作:
sapply(row.names(result), function( x) { do_something_to( result[x, ] ) }
或者
sapply(result$name, function(x) { do_something_to( result[result$name==x, ] ) }
'plyr'包的评估规则略有不同,但在某些方面更宽松......遵循管理subset
的参数如何工作的规则。但是ldply函数实际上是lapply(split( ... ))
范例的替代,其中第二个参数由.
函数处理以创建拆分规则。是的,有一个名为.
的函数。