numvar=c("or" ,"or_lci95","or_uci95") dt[,c(numvar)]<-lapply(dt[,numvar],as.numeric)
时间: 2023-07-19 16:24:05 浏览: 87
根据你提供的代码,我猜测你的数据框 `dt` 中的变量 `or`、`or_lci95` 和 `or_uci95` 都是字符型变量,你想将它们转换为数值型变量。你使用了 `lapply` 函数和 `as.numeric` 函数来实现这个目的,但是出现了错误。
根据错误信息,似乎你在 `dt[,numvar]` 中的 `numvar` 被解释为一个函数,所以出现了 `object of type 'closure' is not subsettable` 的错误。这是因为在 R 中,函数也是一种对象,而函数对象也被称为闭包(closure)。
为了解决这个问题,你可以将 `numvar` 放在方括号中,例如 `dt[, numvar]`,以便将它作为变量名的向量传递给 `[` 运算符,然后对这些变量使用 `lapply` 和 `as.numeric` 函数。以下是你可以尝试的代码:
```
numvar <- c("or", "or_lci95", "or_uci95")
dt[, numvar] <- lapply(dt[, numvar], as.numeric)
```
如果你的数据框中有缺失值,你可能还需要考虑如何处理缺失值。例如,你可以使用 `na.strings` 参数来指定缺失值的字符表示。例如,如果你的缺失值用字符串 "NA" 表示,你可以使用以下代码:
```
numvar <- c("or", "or_lci95", "or_uci95")
dt[, numvar] <- lapply(dt[, numvar], function(x) as.numeric(as.character(x)), na.strings = "NA")
```
希望这可以帮助你解决问题。
阅读全文