R +从函数返回复杂类型

时间:2015-01-23 00:59:08

标签: r matrix dataframe

我需要为每个矩阵返回一个矩阵集合和相关的x,y值(即图像的一部分,以及它在原始内的x / y位置)

我正在尝试这样的事情:

getPortions <- function(imgLocation, portionSize, stepSize) {
    require(dplyr)
    require(foreach)
    require(ripa)
    require(jpeg)

    img <- readJPEG(imgLocation) %>% rgb2grey

    prows <- seq(1, nrow(img) - portionSize, by = stepSize)
    pcols <- seq(1, ncol(img) - portionSize, by = stepSize)

    portions <- foreach(r = prows, .combine = rbind) %do% {
        foreach(c = pcols, .combine = rbind) %do% {
            portion <- img[r:(r + portionSize), c:(c + portionSizee)]

            # this doesn't work correctly
            as.data.frame(portion, r, c)
        }
    }

    portions
}

...但这给我带来了巨大的数据框架。

  • 我尝试将部分转换为矢量,因为这将是函数的有效返回类型(矩阵或矢量很好)。
  • 我试图cbind(部分,r,c)给我一个与我现在类似的结果
  • 我尝试了一两件我忘记的事情,但他们没有任何有利的结果

理想情况下,我想要取回一个包含3列的数据框。第一列是该部分的向量/矩阵,另外两列将包含该部分的行和列位置。

当我在寻找解决方案时,我发现有一些hack允许多种返回类型,但这不是一个很好的解决方案。

编辑&gt; 显然这还不够清楚。如果这是另一种语言(例如C#),我将返回一种IEnumerable&gt;。我不知道如何在R中做到这一点。

Repro

# If necessary
install.packages(c('dplyr', 'foreach', 'doParallel', 'ripa', 'jpeg')) 
library(dplyr)
library(foreach)
library(doParallel)
library(ripa)
library(jpeg)

# copy/paste function here

portions <- getPortions('path/to/image.jpg', 10, 5)
ncol(portions)
[1] 9409

返回的列数取决于图像和部分/步长,但无论哪种方式都超过3,我无法轻易地从数据框中提取矩阵和r / c值。

0 个答案:

没有答案