R 在.tif文件列表上使用函数按大小排序(基于像素)
如问题所述,我正在尝试根据像素高度和宽度对1000个tif文件进行排序(出于生态目的,任何感兴趣的人都可以!) 我编写了一个函数,它使用R 在.tif文件列表上使用函数按大小排序(基于像素),r,function,lapply,R,Function,Lapply,如问题所述,我正在尝试根据像素高度和宽度对1000个tif文件进行排序(出于生态目的,任何感兴趣的人都可以!) 我编写了一个函数,它使用magick包创建一个简单的图像大小,通过imageinfo$width*imageinfo$height实现,请参见下面的更多内容。这与决定其大小的阈值相比较。该函数工作正常,但我正在努力运行列表中的lappy,它会在magick中的image\u read函数中显示错误消息 threshold <- 90000 dirsmallimages <-
magick
包创建一个简单的图像大小,通过imageinfo$width*imageinfo$height
实现,请参见下面的更多内容。这与决定其大小的阈值相比较。该函数工作正常,但我正在努力运行列表中的lappy
,它会在magick
中的image\u read
函数中显示错误消息
threshold <- 90000
dirsmallimages <- "C:/Users/James PC/Desktop/smallimages"
dirbigimages<- "C:/Users/James PC/Desktop/bigimages"
imagelist <- as.list(list.files(
path = "C:/Users/James PC/Desktop",
full.names = TRUE,
recursive = FALSE,
pattern = ".tif"
))
bigsmallsorter <- function(singleimage){
imagepreview <- image_read(singleimage)
imagepreview
imageinfo <- image_info(imagepreview)
imagesize <- as.numeric(imageinfo$width*imageinfo$height)
if(imagesize > threshold){
file.copy(from = singleimage, to = dirbigimages, overwrite = TRUE)
} else {
file.copy(from = singleimage, to = dirsmallimages, overwrite = TRUE)
}
}
lapply(imagelist, FUN = bigsmallsorter(singleimage = imagelist)) # this is kaput
我目前正试图在一个有一个大的[[1]]
和一个小的[[2]]]
:
> imagelist
[[1]]
[1] "C:/Users/James PC/Desktop/Pia1.2017-10-03.1726+N00007823_hc.tif"
[[2]]
[1] "C:/Users/James PC/Desktop/Pia1.2017-10-08.1928+N00691602_hc.tif"
任何帮助都将不胜感激,因为手动排序的图像是一个完全痛苦的屁股
非常感谢两件关键的事情:
一个是,list.files
已经输出了一个可编辑的数据结构,因此无需将其包装为as.list()
第二,您对lappy
的构造不太正确lappy
将第一个参数传递给第二个FUN
参数。通过指定bigsmollsorter(singleimage=imagelist)
,您试图将文件列表传递给接受单个参数的函数,这与lappy
的工作方式直接冲突
相反,我们让lappy
将每个列表项传递给bigsmalsorter
,如下所示:
lapply(imagelist, FUN = bigsmallsorter)
您可以等效地编写:
lapply(imagelist, bigsmallsorter)
写这篇文章的更详细的方式是:
lapply(imagelist, FUN = function(x) bigsmallsorter(singleimage = x))
其中,
x
表示传递imagelist
的变量,一次一个 从list.files()
中删除as.list
,谢谢您的回复!没有快乐,我害怕,同样的错误!除此之外,lappy(imagelist,FUN=bigsmalsorter)
噢,就这么简单!干杯,我在代码“Lappy(imagelist,function(bigsmallsorter))”中也有这个,太接近了!如果你愿意,请回答!非常感谢到达的getOption(“max.print”)--省略的3661个条目
是否意味着这些3661个条目还没有被处理?@Jim no,getOption(“max.print”)
只是引用在被截断之前将被打印到控制台的最大行数。
lapply(imagelist, FUN = function(x) bigsmallsorter(singleimage = x))