“闭包”类型的对象不是子集

机器算法验证 r
2022-03-31 03:26:21

我在 Windows 10 上使用 R(x64 版本 3.2.2)并在(见下文)尝试对具有许多 NA 的非常简单的数据帧进行子集化时收到以下错误消息。

dt <- read.table("Datos.csv", header=T, sep=",")
k1 <- which(apply(is.na(dt),2,sum) < 10)  #Keep variables with <10 NA's
k2 <- which(apply(is.na(dt[,k1]),1,sum)==0)  #Keep observations with no NA's
dt <- dt[k2,k1] 

Error in dt[k2, k1] : object of type 'closure' is not subsettable

在我的情况下,这个错误的原因是什么?

最好的。卢西亚诺

1个回答

您已为 name 分配了一个对象dt不幸dt的是,它也是一个内置 R 函数的名称。

由于 R 的范围规则(尽管@ssdecontrol 在评论中指出,尚不清楚为什么),dt最后一行右侧的解析为该函数,而不是您创建的数据表。R 中的一个函数在内部被称为 a closure,而您正试图在[其上使用该函数,这称为子集。因此,您正在尝试对闭包kaboom进行子集化。

要解决此问题,请在第一行为您的数据表选择一个不同的名称。