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.
换句话说:结果矩阵的行数由要应用的函数中的向量长度决定。
我定义了一个 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.
换句话说:结果矩阵的行数由要应用的函数中的向量长度决定。