R 在.tif文件列表上使用函数按大小排序(基于像素)

R 在.tif文件列表上使用函数按大小排序(基于像素),r,function,lapply,R,Function,Lapply,如问题所述,我正在尝试根据像素高度和宽度对1000个tif文件进行排序(出于生态目的,任何感兴趣的人都可以!) 我编写了一个函数,它使用magick包创建一个简单的图像大小,通过imageinfo$width*imageinfo$height实现,请参见下面的更多内容。这与决定其大小的阈值相比较。该函数工作正常,但我正在努力运行列表中的lappy,它会在magick中的image\u read函数中显示错误消息 threshold <- 90000 dirsmallimages <-

如问题所述,我正在尝试根据像素高度和宽度对1000个tif文件进行排序(出于生态目的,任何感兴趣的人都可以!)

我编写了一个函数,它使用
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))