如何使用R语言中的read.pnm()函数批量导入多个.pgm格式图片?
如何用read.pnm()批量导入多个.pgm文件
当然可以批量导入.pgm文件啦!你遇到的错误是因为在lapply里调用read.pnm的方式不对——咱们来一步步解决:
错误原因
你写的lapply(allFiles, FUN = read.pnm())里,read.pnm()是直接执行了这个函数,但此时没有传入必需的file参数,R自然会报错说缺少file参数。lapply需要的是函数对象,而不是函数执行后的结果。
修正后的代码
这里有两种可行的写法:
写法1:直接传递函数名(最简洁)
lapply会自动把allFiles里的每个文件路径作为第一个参数传给read.pnm:
# 注意pattern用正则精确匹配.pgm后缀,避免匹配到类似"xpgm.txt"的文件 allFiles <- list.files(path = "faces_subset", pattern = "\\.pgm$", full.names = TRUE) pictures <- lapply(allFiles, read.pnm)
写法2:使用匿名函数(适合需要额外参数的场景)
如果需要给read.pnm传递其他参数(比如header = TRUE之类的),可以用匿名函数来包装:
pictures <- lapply(allFiles, function(file_path) { read.pnm(file_path, header = TRUE) # 这里可以添加你需要的额外参数 })
额外小提示
导入后的pictures是一个列表,每个元素是单个.pgm文件的内容。如果后续需要把这些图片合并成矩阵/数组方便处理,可以试试abind包的abind()函数,或者如果每个图片已经被转成向量的话,用do.call(rbind, pictures)来合并成矩阵。
内容的提问来源于stack exchange,提问作者Shecodes




