Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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
如何使用for循环在R中基于两个现有数据帧创建数据帧列表?_R_List_Dataframe_For Loop - Fatal编程技术网

如何使用for循环在R中基于两个现有数据帧创建数据帧列表?

如何使用for循环在R中基于两个现有数据帧创建数据帧列表?,r,list,dataframe,for-loop,R,List,Dataframe,For Loop,我是个新手。我的一些循环已经成功了,其他的。。。没有那么多 我有一些观测数据(df_obs),我想根据我的模型预测(df_pred)进行测试 我目前的目标是:编写一个循环,生成一个数据帧列表,以便在将来评估模型性能的循环中使用此列表。我可能会回来帮你处理这些循环 是:我想要一个数据帧列表。我正在研究50多种物种,并对这些值进行了一系列测试 也许:我想我想要一个for()循环,但如果另一个方法更简单,例如lappy(),我愿意接受建议 我已经尽了最大努力创建了一个可复制的数据集和代码,以模仿我的工

我是个新手。我的一些循环已经成功了,其他的。。。没有那么多

我有一些观测数据(df_obs),我想根据我的模型预测(df_pred)进行测试

我目前的目标是:编写一个循环,生成一个数据帧列表,以便在将来评估模型性能的循环中使用此列表。我可能会回来帮你处理这些循环

是:我想要一个数据帧列表。我正在研究50多种物种,并对这些值进行了一系列测试

也许:我想我想要一个for()循环,但如果另一个方法更简单,例如lappy(),我愿意接受建议

我已经尽了最大努力创建了一个可复制的数据集和代码,以模仿我的工作:

#observed presence (1) and absence (0)
set.seed(733)
df_obs <- data.frame(plot = 1:10,
                    sp1 = sample(0:1, 10, replace = TRUE),
                    sp2 = sample(0:1, 10, replace = TRUE),
                    sp3 = sample(0:1, 10, replace = TRUE))

#predicted probability of occurrence (ranges from 0 to 1)
set.seed(733)
df_preds <- data.frame(plot = 1:10,
                       sp1 = runif(10, 0, 1),
                       sp2 = runif(10, 0, 1),
                       sp3 = runif(10, 0, 1))

sppcodes <- c("sp1", "sp2", "sp3")

test.eval.list <- vector("list", length = length(sppcodes))
names(test.eval.list) <- sppcodes


for(i in seq_along(sppcodes)){
  sppn <- sppcodes[i]

  plot = df_obs$plot
  obs = df_obs[,sppn]
  pred = df_preds[,sppn]

  df <- data.frame(plot, obs, pred) #produces dataframe as expected

  test.eval.list[sppn] <- df #problem seems to be here, it ends up assigning a vector of numbers...  
}
#观察到的存在(1)和不存在(0)
种子集(733)

df_obs您在
for
循环中犯了一个小错误。在访问列表时,您必须使用
[[
而不是
[
。如果您对访问元素的不同方式感兴趣,您可能需要阅读
?Extract

for(i in seq_along(sppcodes)){

   sppn <- sppcodes[i]
   plot = df_obs$plot
   obs = df_obs[,sppn]
   pred = df_preds[,sppn]
   df <- data.frame(plot, obs, pred) 
   test.eval.list[[sppn]] <- df 
}

你是个漂亮的人,谢谢你。这总是语法问题……堆栈溢出标记问题已解决的方式是接受答案——你需要单击答案旁边左边空白处的复选标记。不要编辑你的问题说问题已解决,只需接受答案即可。
Map(cbind.data.frame, plot = list(df_obs$plot),obs=df_obs[-1],pred = df_preds[-1])

#[[1]]
#   plot obs      pred
#1     1   1 0.3266487
#2     2   1 0.3745092
#3     3   0 0.8633161
#4     4   0 0.1970302
#5     5   1 0.3017755
#6     6   0 0.9154151
#7     7   0 0.6193044
#8     8   0 0.4020479
#9     9   1 0.9947362
#10   10   1 0.7975380
#...
#....