【问题标题】:R - apply / mapply - Transpose is RequiredR - 应用/映射 - 需要转置
【发布时间】:2015-11-26 07:26:19
【问题描述】:

我定义了一个 R 函数,它接受 2 个字符串作为输入,并返回 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(...) 很容易,但我只想知道我忽略了什么。

谢谢, 马尼什

【问题讨论】:

    标签: r apply mapply


    【解决方案1】:

    看看文档 (?apply)

    如果对 FUN 的每次调用都返回一个长度为 n 的向量,则如果 n > 1,apply 将返回一个维度为 c(n, dim(X)[MARGIN]) 的数组。

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

    【讨论】:

    • 谢谢。所以 apply 和 mapply 需要转置才能将其映射回原始数据集
    猜你喜欢
    • 2019-02-12
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多