我遇到了dplyr的问题,当我在生存分析中使用它时会导致错误消息。根本原因是,当使用[,]表示法引用分组数据框(或具有类tbl_df的任何对象)中的变量时,即使实际长度大于该值,它也始终报告长度为1。 。使用$ x表示法报告正确的长度。
使用数据框,以下内容返回预期长度32:
length(mtcars$mpg)
length(mtcars[ , "mpg"])
使用分组数据框,$符号返回32,其余所有使用[]符号返回长度1:
foo <- mtcars %>% group_by(cyl)
length(foo$mpg)
length(foo[ , "mpg"])
length(foo[ , 1])
VarName <- "mpg"
length(foo[ , VarName])
只是报告的长度不正确数据本身就在那里,即:
head(foo[ , "mpg"])
报告的错误长度导致Surv()等函数出现错误消息,可能包括length()检查。这显然是一个非常简单的例子来说明。在失败的程序中,我在函数内使用[,VarName]表示法来引用变量列。解决方法是简单地将数据从有问题的数据帧Tbl格式转换为函数内的普通数据帧。任何人都可以解释为什么会发生这种情况吗?它可能会让其他人浪费尽可能多的时间!