【发布时间】:2014-04-14 15:42:10
【问题描述】:
我有一个data.tableoutcome,其中有一列名为hospital。和一个名为state 的列。 outcome 已经排序。现在我想从每个state 中提取第n 个hospital(如果没有第n 个则返回该状态的NA)。我尝试通过以下方式解决它。(由于这是作业,我只展示了导致错误的第三个分支)。
rankall <- function(out, num = "best"){
outcome <- readdata(outcome = out) //returns a data.table sorted by rate
...
outcome <- lapply(outcome, function(x) ifelse(num <= nrow(x), x[num,], c(NA,NA)))
outcome <- rbindlist(outcome)
}
原来outcome是这样的
> data
hospital state
1: NYU HOSPITALS CENTER NY
2: DOYLESTOWN HOSPITAL PA
3: AVERA HEART HOSPITAL OF SOUTH DAKOTA LLC SD
4: GLENDALE ADVENTIST MEDICAL CENTER CA
5: WATERBURY HOSPITAL CT
---
2716: DESERT SPRINGS HOSPITAL NV
2717: THREE RIVERS COMMUNITY HOSPITAL OR
2718: ROBERT WOOD JOHNSON UNIVERSITY HOSPITAL AT RAHWAY NJ
2719: LAREDO MEDICAL CENTER TX
2720: MEDICAL CENTER SOUTH ARKANSAS AR
第一个和第二个分支可以产生正确的结果,就像
> head (data)
hospital state
1: NA AK
2: CRESTWOOD MEDICAL CENTER AL
3: ARKANSAS HEART HOSPITAL AR
4: MAYO CLINIC HOSPITAL AZ
5: GLENDALE ADVENTIST MEDICAL CENTER CA
6: ST MARYS HOSPITAL AND MEDICAL CENTER CO
> nrow(data)
[1] 54
但是,第三个条件无法发挥作用。哪个产生错误
Error in rbindlist(outcome) :
Item 1 of list input is not a data.frame, data.table or list
调试后我发现条件之后的结果是这样的(导致最后一步的错误)
$AK
[1] NA
$AL
$AL[[1]]
[1] "HIGHLANDS MEDICAL CENTER"
与前两个不同的是...
> head(data,2)
$AK
hospital state
1: PROVIDENCE ALASKA MEDICAL CENTER AK
$AL
hospital state
1: CRESTWOOD MEDICAL CENTER AL
所以我想知道第三个分支出了什么问题。 谁能帮帮我,万分感谢!!!
顺便说一句,我想知道我是否可以引用另一个同名的变量。比如当我调用readdata 时,我需要传递一个名为outcome 的参数,这会阻止我使用这个名称作为rankall 函数的参数(我改用out)。我知道在 JAVA 中 this.outcome 会有所帮助,那么在 R 中怎么样。
【问题讨论】:
-
这是来自 Coursera,R 编程课程的作业,因此请注意不要违反荣誉代码,在测试条件之前,如果将它们转换为数字等价物会有所帮助,
if (num=="best" index == 1,@ 987654342@else index = as.numeric(num) -
抱歉,我已经隐藏了一些细节。现在这样好吗?感谢您的帮助!顺便说一句,你能解决我关于命名空间的最后一个问题吗?
-
州 AK 的 NA 可能表明对于特定疾病 AK 没有医院覆盖它,您可以通过仅为 AK 子集结果数据来验证这一点。关于“命名”问题,默认情况下,参数是位置匹配的,因此在 rankall 函数中,
rankall(outcome=outcome,...是一个完全有效的语句 -
其实AK中的NA是我人为改变来表示NA发生时的情况:)。由于您的帮助,“命名”现在起作用了!奇怪的是,我尝试了同样的事情,但它没有奏效。非常感谢你
-
似乎可以对
rbindlist进行改进。我已经链接了这个问题here。
标签: r data.table