Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.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 递归索引在级别2失败_R_List_Recursion_Lm_Sapply - Fatal编程技术网

R 递归索引在级别2失败

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

我试图对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, 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]))
})