【问题标题】:sapply( ) and unused function argumentssapply( ) 和未使用的函数参数
【发布时间】:2018-05-24 12:10:42
【问题描述】:

我是 R 新手,正在尝试解决其中一个家庭作业问题。我正在练习使用的一组函数是apply() 系列。具体来说,本题要求使用sapply()函数来计算向量的均值。

稍微设置背景。首先,这是我的 prop_peer_pressure 函数:

写一个函数 prop peer pressure ,接受一个医生的索引号和一个月,返回当月医生的联系人中已经在开四环素的比例。如果医生没有联系人,则您的函数应返回 NaN。检查医生 37,第 5 个月返回的比例为 0.6。

prop_peer_pressure <- function(index, month) {
   if (doc.contacts[index] == 0) {
     return(NaN)
   }
   else {
   return(count_peer_pressure(index, month) / doc.contacts[index])
 }
}


prop_peer_pressure(37, 5)
# 37 
# 0.6 

adopters() 是我编写的另一个函数,它返回在第 x 个月开始开药的医生的索引。

adopters(2)
# [1]  10  13  20  56  71  75  76  87 107


sapply(adopters(2), prop_peer_pressure, 2)
# 10     13     20     94     128    132    133    168    200
# 0.0000 0.3333 0.1428 0.0909 0.3333 0.4000 0.3333 0.1666 0.3333

这可行,但我想知道 R 是如何知道需要将哪个“索引”数字输入“prop_peer_pressure”函数的?由于我的 prop_peer_pressure 函数接受 2 个参数(索引、月份)...

sapply(adopters(2), prop_peer_pressure, index = adopters(2), month = 2)

FUN(X[[i]], ...) 中的错误:未使用的参数 (X[[i]])

【问题讨论】:

  • 任何未命名的参数都将恢复为默认值。也就是说,您对这个问题采取了错误的方法——从data.table 中查看by 或从dplyr 中查看group_by 以获得更典型的处理分组操作的方法

标签: r sapply


【解决方案1】:

sapply 的工作原理

关于 sapply 的工作原理,这三个都给出了相同的结果:

f <- function(x, y) x + y

sapply(1:5, f, 10)
## [1] 11 12 13 14 15

sapply(1:5, function(x) f(x, 10))
## [1] 11 12 13 14 15

c(f(1, 10), f(2, 10), ..., f(5, 10))
## [1] 11 12 13 14 15

在每种情况下,f 对 1:5 的每个元素运行一次,使用该元素作为 f 的第一个参数并使用 10 作为 f 的第二个参数。

最后一个问题中的错误

问题中的最后一个 sapply 给出了一个错误,因为它试图将三个参数传递给函数,但该函数只接受两个参数。 prop_peer_pressure 的第一个参数来自 sapply 的第一个参数的连续组件,prop_peer_pressure 的其余两个参数是 index= 和 month=,它们是在调用 sapply 结束时指定的。那就是它试图运行这个:

c(prop_peer_pressure(10, index = adopters(2), month = 2), 
  prop_peer_pressure(13, index = adopters(2), month = 2), 
  ... etc ...)

这显然不是本意。

【讨论】:

    猜你喜欢
    • 2015-07-14
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多