r - 跨不同目录将一个函数的列表传递给另一个函数
问题描述
我正在尝试将随机数分配给各种目录中的文件副本(复制起来很棘手)。目录结构如下:
1100
1100/Images
我首先创建新目录并复制图像。为此,我有以下工作
NewImageGen <- function(singledir){
#
Directoryforrandoms <- "RandomNumAsignment"
Directoryforrandoms <- paste(singledir, "/", Directoryforrandoms, sep = "")
dir.create(Directoryforrandoms,
showWarnings = F)
#
Imagedir <- paste(singledir, '/Images', sep = '')
filestocopy <- list.files(Imagedir,
recursive = F,
full.names = T)
file.copy(from = filestocopy,
to = Directoryforrandoms,
overwrite = F)
#
newfiles <- list.files(path = Directoryforrandoms,
pattern = ".tif", # they are all tiff files
full.names = T)
#
return(newfiles)
}
NewImages <- pblapply(alldirs, FUN = NewImageGen)
这给了我一个很大的列表,分为四个(因为在这个实例中有四个目录)。我想将它传递newfiles
给另一个函数,该函数生成一个随机数前缀并将其粘贴在前面。我可以使用以下方法对常规文件列表执行此操作:
RandomNumGen <- function(singleimg){
randomnumber <- as.character(sample(100000:999999, 1, replace=F))
singlerename <- sub('^', randomnumber, singleimg)
file.rename(from = singleimg,
to = singlerename)
}
它遍历列表的所有元素,但返回一个令人沮丧的false
.
任何帮助都是一流的!
解决方案
pblapply()
返回一个list
whilelist.files()
返回一个字符向量。list.files()
因此,如果您的函数适用于尝试将您的调用从 更改pblapply()
为的返回值pbsapply()
。
编辑:
newfiles
,即NewImageGen()
函数的返回值,包含完整路径(如您full.names = T
在上次list.files()
调用中设置的那样)。
sub('^', randomnumber, singleimg)
将在路径的第一部分之前添加随机数,例如677570/home/Jim/1100/Images/RandomNumAsignment/original_image_name.tif
.
相反,你想做
file.path(dirname(singleimg), sub('^', randomnumber, basename(singleimg))
推荐阅读
- r - CSV 中的单元格(错误地)被读取为 R 中长度为 2 的字符向量
- c# - 当“ASPNETCORE_ENVIRONMENT”:“开发”时,无法从根提供商解析范围服务
- reactjs - ./src/index.js 中的错误模块未找到:../src @ ./src/index.js 中的“shaka-player-react” 17:24-53
- c++ - 如何解决此错误“呼叫没有匹配功能”?
- r - 创建事件开始变量
- css - 如何从网站中隐藏一段常见的文本
- python - Python中的利息计算器。查找总金额和每年支付的金额
- bash - 未执行简单的 .sh 命令
- reactjs - 有没有办法限制 React Native 的 TextInput 中的总行数或换行符?
- java - 来自自定义对象的 JAVA 接口继承