R 递归索引在级别2失败
我试图对R中的线性模型进行重复随机子抽样。为了实现这一点,我首先创建一个数据表索引列表,用于训练模型,然后对该特定子集使用R 递归索引在级别2失败,r,list,recursion,lm,sapply,R,List,Recursion,Lm,Sapply,我试图对R中的线性模型进行重复随机子抽样。为了实现这一点,我首先创建一个数据表索引列表,用于训练模型,然后对该特定子集使用lm。下面是使用ggplot2中的diamonds数据集的示例代码: library(data.table) library(caTools) library(ggplot2) rm(list = ls()) dat <- as.data.table(diamonds)[1:5000,] n <- 20 dat_list <- lapply(1:n, fu
lm
。下面是使用ggplot2
中的diamonds
数据集的示例代码:
library(data.table)
library(caTools)
library(ggplot2)
rm(list = ls())
dat <- as.data.table(diamonds)[1:5000,]
n <- 20
dat_list <- lapply(1:n, function(z) return(sample.split(dat$carat, SplitRatio = 3/4)) )
奇怪的是,当我上次尝试这个时,它起了作用,但今天我得到了以下错误:
dat_列表[[z]]中出错:递归索引在级别2失败
如果我首先将索引保存到另一个变量,则代码似乎有效:
coefs <- sapply(1:n, function(z){
train_indices <- dat_list[[z]]
m <- lm(price ~ carat, data = dat[train_indices,])
return(unname(m$coefficients[2]))
})
coefs可能昨天您将dat
更改为数据帧而不是数据表。似乎有效。您真的需要datatable吗?不应该是这样,我的代码的第一行加载了常用的包(data.table、ggplot2等)。我使用data.table
,因为它更快(我有很多观察结果),而且我发现它的[I,j,by]
格式更容易。加载包的事实并不意味着函数将在处理数据帧时处理数据表。创建数据帧时,请尝试将dat
更改为dataframe,并检查代码是否有效。我们的目标是找出这段代码中断的原因,然后使用datatable结构对其进行调整。如果我不使用datatable,它就会工作,我会相应地更改代码的其他部分。但是,根据文档,由于data.table是data.frame,因此它与仅接受data.frames的R函数和包兼容。
coefs <- sapply(1:n, function(z){
train_indices <- dat_list[[z]]
m <- lm(price ~ carat, data = dat[train_indices,])
return(unname(m$coefficients[2]))
})