【问题标题】:Applying a function with two arguments using Lapply使用 Lapply 应用具有两个参数的函数
【发布时间】:2016-05-12 12:00:36
【问题描述】:

我创建了一个名为 testFunc 的测试函数,它需要两个参数。

testFunc<-function(x,y){
  length(x)
  nrow(y)
}

现在我想使用 lappy 将此函数应用于列表,同时保持 y 参数不变。

考虑一个测试列表,testList:

testList<-list(a=c(1,2,3,4,5,5,6),b=c(1,2,4,5,6,7,8))

我们可以使用 lapply 在 testList$a 和 testList$b 上运行具有相同 y 值的 testFunc 吗?

我试过这个电话:

lapply(X = testList, FUN = testFunc, someDataFrame)

但我总是将 someDataFrame 的长度作为输出。我是否遗漏了一些明显的东西。

【问题讨论】:

  • 为什么不将y 设置为在函数中固定,并且只使用x 作为参数?即testfunc &lt;- function(x, y=...) {...} ?
  • @Sotos :发布的代码已经完成了这项工作。但是,我认为 Tushar 想要同时返回 length(x) 和 nrow(y)
  • 是的,我认为这没有多大意义......
  • @vasanthcullen 我希望它打印值 7, nrow(someDataFrame) 两次,因为 testList 有两个向量。它给我的只是 7 和 nrow(someDataFrame) 一次。
  • @vasanthcullen 是的,明白了。我应该使用 print 来打印行数。我认为你关于 R 打印最后一个评估值的观点是原因。谢谢。

标签: r lapply


【解决方案1】:

把你的函数改成

testFunc<-function(x,y){
  return(c(length(x), nrow(y)))
}

默认情况下,R 函数返回最后评估的值

【讨论】:

    【解决方案2】:

    最简单的方法,使用命名变量:

    lapply(X = testList, FUN=testFunc, y=someDataFrame)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      • 2015-04-25
      • 2011-10-13
      • 2019-09-08
      相关资源
      最近更新 更多