R - apply / mapply - 需要转置

R - apply / mapply - Transpose is Required

我定义了一个 R 函数,它将 2 个字符串作为输入,returns 10 列作为输出。用示例函数来解释问题 -

func.ret.10.cols = function(x,y) {
# process strings ... yada yada
.....
# process strings ... yada yada
return ( cbind(1,2,3,4,5,6,7,8,9,10))
}

使用数据框对此进行测试 -

> df1
                                    V1                                   V2
1 741 zulu zulu street 71 15 41 510741 741 14 21 zulu zulu street 71 510742
2 741 zulu zulu street 71 15 41 510741 741 14 21 zulu zulu street 71 510742

> str(df1)
'data.frame':   2 obs. of  2 variables:
 $ V1: chr  "741 zulu zulu street 71 15 41 510741" "741 zulu zulu street 71 15 41 510741"
 $ V2: chr  "741 14 21 zulu zulu street 71 510742" "741 14 21 zulu zulu street 71 510742"
> 

现在当我调用这个函数时,我希望得到 10 列和 2 行的输出。但是我总是得到 2 列和 10 行。

> apply(df1[,c('V1','V2')], 1, function(x) func.ret.10.cols(x[1],x[2]))
       1  2
 [1,]  1  1
 [2,]  2  2
 [3,]  3  3
 [4,]  4  4
 [5,]  5  5
 [6,]  6  6
 [7,]  7  7
 [8,]  8  8
 [9,]  9  9
[10,] 10 10
> mapply(function(x,y) func.ret.10.cols(x,y), df1$V1, df1$V2)
      741 zulu zulu street 71 15 41 510741 741 zulu zulu street 71 15 41 510741
 [1,]                                    1                                    1
 [2,]                                    2                                    2
 [3,]                                    3                                    3
 [4,]                                    4                                    4
 [5,]                                    5                                    5
 [6,]                                    6                                    6
 [7,]                                    7                                    7
 [8,]                                    8                                    8
 [9,]                                    9                                    9
[10,]                                   10                                   10

我也试过 as.data.frame(cbind(1,2,3....)),但还是一样。 有什么我想念的吗?

虽然使用 t(apply(...) 很容易,但我只想知道我忽略了什么。

谢谢, 马尼什

看看文档(?apply)

If each call to FUN returns a vector of length n, then apply returns an array of dimension c(n, dim(X)[MARGIN]) if n > 1.

换句话说:结果矩阵的行数由要应用的函数中的向量长度决定。