Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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 在两个不同长度的列表上使用apply_R - Fatal编程技术网

R 在两个不同长度的列表上使用apply

R 在两个不同长度的列表上使用apply,r,R,这个问题与我之前在这里发现的问题有关: 我意识到我在问第一个问题时做得不好,所以这里有一个更简单的实际数据模拟: 我的数据如下所示: #data look like this, but with a variable number of "y" columms wk<-rep(1:50,2) X<-rnorm(1:100,1) y1<-rnorm(1:100,1) y2<-rnorm(1:100,1) df1<-as.data.frame(cbind(wk,X,

这个问题与我之前在这里发现的问题有关:

我意识到我在问第一个问题时做得不好,所以这里有一个更简单的实际数据模拟:

我的数据如下所示:

#data look like this, but with a variable number of "y" columms
wk<-rep(1:50,2)
X<-rnorm(1:100,1)
y1<-rnorm(1:100,1) 
y2<-rnorm(1:100,1)

df1<-as.data.frame(cbind(wk,X,y1,y2))
df1$hyst<-ifelse(df1$wk>=5 & df1$wk<32, "R", "F")

Y<-df1[, -which(colnames(df1) %in% c("wk"))] #this step makes more sense with my actual data since I have a bunch of columns to remove  
l1<-length(Y)-1
lst1<-lapply(2:l1,function(x){colnames(Y[x])}) 
dflst<-c("Y",'Y[Y$hyst=="R",]','Y[Y$hyst=="F",]')
#数据如下所示,但具有可变数量的“y”列

wk像这样构建您的DF列表

DFlst <- c(list(full=Y), split(Y, Y$hyst))

str(DFlst)

List of 3
 $ full:'data.frame':   100 obs. of  4 variables:
  ..$ X   : num [1:100] 1.792 3.192 0.367 1.632 1.388 ...
  ..$ y1  : num [1:100] 3.354 1.189 1.99 0.639 0.1 ...
  ..$ y2  : num [1:100] 0.864 2.415 0.437 1.069 1.368 ...
  ..$ hyst: chr [1:100] "F" "F" "F" "F" ...
 $ F   :'data.frame':   46 obs. of  4 variables:
  ..$ X   : num [1:46] 1.792 3.192 0.367 1.632 0.707 ...
  ..$ y1  : num [1:46] 3.354 1.189 1.99 0.639 0.894 ...
  ..$ y2  : num [1:46] 0.864 2.415 0.437 1.069 1.213 ...
  ..$ hyst: chr [1:46] "F" "F" "F" "F" ...
 $ R   :'data.frame':   54 obs. of  4 variables:
  ..$ X   : num [1:54] 1.388 2.296 0.409 1.494 0.943 ...
  ..$ y1  : num [1:54] 0.1002 0.6425 -0.0918 1.199 0.8767 ...
  ..$ y2  : num [1:54] 1.368 1.122 0.402 -0.237 1.518 ...
  ..$ hyst: chr [1:54] "R" "R" "R" "R" ...

对象
DFlst
非常奇怪。不要用引号写命令;只需编写命令。
DFlst <- c(list(full=Y), split(Y, Y$hyst))

str(DFlst)

List of 3
 $ full:'data.frame':   100 obs. of  4 variables:
  ..$ X   : num [1:100] 1.792 3.192 0.367 1.632 1.388 ...
  ..$ y1  : num [1:100] 3.354 1.189 1.99 0.639 0.1 ...
  ..$ y2  : num [1:100] 0.864 2.415 0.437 1.069 1.368 ...
  ..$ hyst: chr [1:100] "F" "F" "F" "F" ...
 $ F   :'data.frame':   46 obs. of  4 variables:
  ..$ X   : num [1:46] 1.792 3.192 0.367 1.632 0.707 ...
  ..$ y1  : num [1:46] 3.354 1.189 1.99 0.639 0.894 ...
  ..$ y2  : num [1:46] 0.864 2.415 0.437 1.069 1.213 ...
  ..$ hyst: chr [1:46] "F" "F" "F" "F" ...
 $ R   :'data.frame':   54 obs. of  4 variables:
  ..$ X   : num [1:54] 1.388 2.296 0.409 1.494 0.943 ...
  ..$ y1  : num [1:54] 0.1002 0.6425 -0.0918 1.199 0.8767 ...
  ..$ y2  : num [1:54] 1.368 1.122 0.402 -0.237 1.518 ...
  ..$ hyst: chr [1:54] "R" "R" "R" "R" ...
res <- lapply(DFlst, function(DF) {
  cols =  grep("^y[0-9]+$",names(DF),value=TRUE)
  lapply(setNames(cols,cols), 
    function(y) lm(paste(y,"~X"), data=DF))
  })

str(res, list.len=2, give.attr=FALSE)

List of 3
 $ full:List of 2
  ..$ y1:List of 12
  .. ..$ coefficients : Named num [1:2] 0.903 0.111
  .. ..$ residuals    : Named num [1:100] 2.2509 -0.0698 1.046 -0.4464 -0.9578 ...
  .. .. [list output truncated]
  ..$ y2:List of 12
  .. ..$ coefficients : Named num [1:2] 1.423 -0.166
  .. ..$ residuals    : Named num [1:100] -0.2623 1.5213 -0.9253 -0.0837 0.1751 ...
  .. .. [list output truncated]
 $ F   :List of 2
  ..$ y1:List of 12
  .. ..$ coefficients : Named num [1:2] 0.9289 0.0769
  .. ..$ residuals    : Named num [1:46] 2.2871 0.0146 1.0332 -0.4157 -0.0889 ...
  .. .. [list output truncated]
  ..$ y2:List of 12
  .. ..$ coefficients : Named num [1:2] 1.4177 -0.0789
  .. ..$ residuals    : Named num [1:46] -0.413 1.25 -0.952 -0.22 -0.149 ...
  .. .. [list output truncated]
  [list output truncated]