Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何根据条件从列表中子集行_R_Data.table - Fatal编程技术网

R 如何根据条件从列表中子集行

R 如何根据条件从列表中子集行,r,data.table,R,Data.table,我有一个data.table结果,它有一个名为hospital的列。和一个名为state的列。结果已经分类了。现在我想把每个州的第n家医院子集,如果没有第n家医院,那么返回该州的NA。我试着用下面的方法来解决它。因为这是一个家庭作业,所以我只展示了导致错误的第三个分支 rankall <- function(out, num = "best"){ outcome <- readdata(outcome = out) //returns a data.table sorted

我有一个data.table结果,它有一个名为hospital的列。和一个名为state的列。结果已经分类了。现在我想把每个州的第n家医院子集,如果没有第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)
}
第一个和第二个分支可以产生正确的结果,就像

 > 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时,我需要传递一个名为output的参数,这会阻止我使用这个名称作为我使用out的rankall函数的参数。我知道在JAVA中,这个结果会有帮助,那么在R中呢。

谢谢你对Vivek的帮助,我现在已经知道了。 首先是关于第三分公司的mis绩效。如果我首先使用as.numericnum将num转换为一个数字,它将正常工作。我认为这是因为num被认为是一个字符,因为它可能有最好和最坏的值,这导致了错误。 第二个关于命名空间的问题很奇怪。虽然在我自己的测试中表现不好,但在Vivek回答我的问题后,它才起作用。这意味着我们可以使用下面的代码,R将得到正确的结果

rankall <- function(outcome, num = "best"){
    outcome <- readdata(outcome = outcome)

下面的输出是一个警告信号,结果的第一个元素只是NA,一个原子,它被函数rbindlist强制与第二个元素“绑定”,第二个元素是列表$AL[[1]]

可能的解决办法:

一种方法是在所有三种情况下都有data.frame或list输出,如果条件阻塞,例如使用data.frame,一旦num为数值,则以下内容应适用于所有情况,最佳、最差和中间行

sapply(outcome, function(x) data.frame(state=x[num,"state"],hospital=x[num,"hospital"])

对于不匹配的病例,医院栏应该有一个NA,请检查这是否有效

这是Coursera,R编程课程的作业,因此请注意不要违反荣誉代码,在测试条件之前,如果将它们转换为数值等价物,如果num==最佳索引==1,如果num==最差索引=nrowx else index=as.numericnums对此表示担忧,我已经通过隐藏一些细节进行了更改。现在可以了吗?谢谢你的帮助!顺便问一下,你能解决我最后一个关于命名空间的问题吗?AK州的NA可能表明,对于特定疾病AK没有医院覆盖,你可以通过只为AK设定结果数据来验证这一点。关于“命名”问题,默认情况下,参数是位置匹配的,因此在rankall函数中,rankalloutcome=结果,。。。是一个完全有效的语句实际上AK中的NA是我人为更改的,以指示NA发生时的情况:。由于你的帮助,“命名”现在可以工作了!奇怪的是,我尝试了同样的方法,但都没用。谢谢你,Veeeeeeeeeeeeeeeeeeeeelly,我觉得有可能会有改进。我把这个问题联系起来了,它确实有效。我认为你的第一个解决方案更简单
$AK
[1] NA

$AL
$AL[[1]]
[1] "HIGHLANDS MEDICAL CENTER"
sapply(outcome, function(x) data.frame(state=x[num,"state"],hospital=x[num,"hospital"])