我有一个data.table
outcome
,其中有一个名为hospital
的列。以及一个名为state
的列。 outcome
已经排序。现在我想要从每个hospital
中对第n state
进行子集化(如果不是第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
然而,第三个条件只是COULDN&#39; T做它的工作。哪会产生错误
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。
答案 0 :(得分:0)
感谢Vivek的帮助,我现在已经知道了。
首先是关于第三个分支的错误表现。如果我首先使用num
将as.numeric(num)
转换为数字,它将正常工作。我认为这是因为num
被认为是一个角色(因为它有可能是“最佳”和“最差”的价值)导致了这个错误。
关于命名空间的第二个是奇怪的。虽然在我自己的测试中表现不佳,但它只是在Vivek回答我的问题之后才开始工作。所以,这意味着我们可以使用以下代码,R将为我们提供正确的结果。
rankall <- function(outcome, num = "best"){
outcome <- readdata(outcome = outcome)
答案 1 :(得分:0)
下面这个输出是一个警告标志,结果的第一个元素就是NA,一个被迫“绑定”的原子。第二个元素是函数$AL[[1]]
rbindlist
$AK
[1] NA
$AL
$AL[[1]]
[1] "HIGHLANDS MEDICAL CENTER"
可能的解决方案:
一种方法是在所有三种情况data.frame
条件块中输出list
或if
,例如使用data.frame
,一旦num
为数字,以下内容应适用于所有情况,最佳,最差和中间行。
sapply(outcome, function(x) data.frame(state=x[num,"state"],hospital=x[num,"hospital"])
对于没有匹配的病例,医院专栏应该有NA,请你检查一下是否有效