【问题标题】:Function takes arbitrary number of matrices as arguments and returns all matrices in a list (R)函数将任意数量的矩阵作为参数并返回列表中的所有矩阵 (R)
【发布时间】:2014-06-14 12:41:32
【问题描述】:

我必须定义一个函数,它接受任意数量的矩阵作为参数并返回列表中的所有矩阵,其中所有返回的矩阵中的缺失值已被删除。

我已经为一个变量写了代码

applyDropNaMatrix <- function(X){
apply_mat_list <- apply(Y, MARGIN=1, function(Z) Z[!is.na(Z[])])
return(apply_mat_list) 
}

我需要为更多的变量(即参数“...”)实现这个函数。解决方案(我不被允许使用“complete.cases(x)”

applyDropNaMatrix <- function(...) sapply( list( ... ) , function(X) X[rowSums(is.na(X))==0 , ], simplify=F)

非常感谢!你“拯救”了我的周末:D

【问题讨论】:

  • 您删除 NA 的函数很可能会将您的矩阵转换为列表,这是您想要的吗?
  • 嗯,实际上最终结果必须是我作为输入提供的矩阵列表。您的观察非常聪明,因为如果我删除 NA,这些矩阵不再是矩阵......也许我应该删除包含 NA 元素的整行......
  • -1 I was not allowed to use "complete.cases(x)。这是 Stack Overflow 最荒谬的(ab)使用;它不仅是家庭作业,而且是为了自己学习一些东西而人为限制的。让其他人花时间在上面有什么意义?
  • 显然我无法为@baptiste 回答问题,但我认为如果对问题有最低限度的了解并且OP 自己进行了一些研究,那么家庭作业问题中没有固有的问题。也许下次你清楚地指定它是家庭作业会更好,以避免人们认为你只是希望有人为你做作业(这里不是这种情况)。无论如何,没有伤害,很高兴你解决了你的问题。 PS:关于作业有a post on Meta
  • 好吧,我可能反应过度了,但我希望你能明白原因:真正的编程问题与仅为人工作业和教育目的而设计的问题之间存在很大差异。如果是家庭作业,请务必明确说明,以便人们做出明智的回应选择。

标签: r list matrix user-defined-functions apply


【解决方案1】:

这应该可以满足您的需求(实际上适用于任何类型,而不仅仅是矩阵)

put.in.list <- function(...)
  {
  list(...)
  }

我建议删除NA

my.list <- put.in.list(m1, m2, m3, m4)
my.list.no.NA <- sapply(my.list, function(x){m[complete.cases(m),]}, simplify=F)

注意simplify=F 强制输出到一个列表,否则输出可能会被简化为一个矩阵,如果列表的所有成员都兼容的话。

【讨论】:

  • 显然,因为它只有一行,所以没有真正需要函数......你可以写list(m1, m2, m3, m4)。但是,您可能希望直接在函数中处理 NA。
  • 你可以把它归结为put.in.list &lt;- function(...) lapply( list( ... ) , function(x) x[ complete.cases(x) , ] )
  • 非常感谢!但是我不允许使用“complete.cases(x)”,因为我们的教授喜欢让我们发疯! :P 我会尝试寻找一些替代品..
猜你喜欢
  • 2018-12-04
  • 1970-01-01
  • 2021-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-01
  • 2017-11-16
相关资源
最近更新 更多