【问题标题】:R apply Return submatrixR应用返回子矩阵
【发布时间】:2015-03-24 13:50:50
【问题描述】:

鉴于此代码:

test=matrix(c(1,2,3,4,5,6,7,8,9,10,11,12),4)
splitData=data.frame(first=c(1,3),second=c(2,4))
apply(splitData,1,function (x) {test[x[1]:x[2],]})

我得到了这个矩阵:

     [,1] [,2]
[1,]    1    3
[2,]    2    4
[3,]    5    7
[4,]    6    8
[5,]    9   11
[6,]   10   12

为什么我没有得到矩阵列表?

预期结果:

[[1]]
     [,1] [,2] [,3]
[1,]    1    5    9
[2,]    2    6   10

[[2]]
     [,1] [,2] [,3]
[1,]    3    7   11
[2,]    4    8   12

【问题讨论】:

  • 确实有效,将矩阵转换为数据框也有效,但为什么不挖掘呢?

标签: r matrix syntax apply


【解决方案1】:

你可以试试

do.call(`c`,apply(splitData, 1, function(x) list(test[x,])))

或者

lapply(seq_len(nrow(splitData)), function(i)  test[unlist(splitData[i,]),])

来自?apply

如果每次调用‘FUN’都返回一个长度为‘n’的向量,那么‘apply’ 如果“n > 1”,则返回一个维度为“c(n, dim(X)[MARGIN])”的数组。 如果‘n’等于‘1’,如果‘MARGIN’有长度,‘apply’返回一个向量 1 和维度为“dim(X)[MARGIN]”的数组,否则。如果‘n’是 ‘0’,结果长度为 0,但不一定是‘正确’ 方面。 如果对“FUN”的调用返回不同长度的向量,则“应用” 返回长度为“prod(dim(X)[MARGIN])”的列表,其中“dim”设置为 'MARGIN' 如果它的长度大于一。

【讨论】:

  • 我想知道为什么我的不起作用 - 这更多是理解语言的问题,而不是找到解决方法。
  • 来自?apply‘apply’ attempts to coerce it to an array via ‘as.matrix’ if it is two-dimensional (e.g., a data frame) or via ‘as.array’.
猜你喜欢
  • 2014-09-18
  • 2018-12-04
  • 1970-01-01
  • 1970-01-01
  • 2014-07-26
  • 2011-09-25
  • 2012-11-03
  • 2016-08-30
  • 1970-01-01
相关资源
最近更新 更多