首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多倍comparative.data应用错误- PGLS (caper)

多倍comparative.data应用错误- PGLS (caper)
EN

Stack Overflow用户
提问于 2018-12-18 13:38:15
回答 1查看 113关注 0票数 1

在以下问题上我需要帮助。

我生成了一个包含1000个comparative.data的列表,我希望使用每个comparative.data运行1000个pgls。为此,我尝试使用lapply函数,使用以下代码:

代码语言:javascript
复制
pg <- lapply(obj, function(z){pgls(formula = y ~ x, cd[[z]], lambda = "ML")})

obj是一个包含1000 data.frames和我的数据的列表。cd是我列出的1000 comparative.data的列表。

当我试图运行此代码时,以下错误返回:

代码语言:javascript
复制
 Error in pgls(formula = y ~ x, cd[[z]], lambda = "ML") : 
  object 'z' not found

我看不出错误的来源在哪里

提前感谢

更多信息

obj用于生成comparative.data。为了使用comparative.data列表中的1000个数据帧生成1000个obj,我使用了:

代码语言:javascript
复制
cd <- lapply(1:1000, function(x) comparative.data(phy = phylogeny, 
                                            data = as.data.frame(obj[[x]]), 
                                            names.col = species_name,
                                            vcv=T, vcv.dim=3))

要为第100次pgls运行一个comparative.data,代码是:

代码语言:javascript
复制
mod <- pgls(formula = y ~ x, cd[[100]], lambda = "ML")

obj 调用第一百和第一百

代码语言:javascript
复制
obj[[100]]
# A tibble: 136 x 3
# Groups:   Binomial, herbivores [136]
   Binomial                            herbivores      tm
 * <chr>                                    <dbl>   <dbl>
 1 Abies_alba                                 30. 0.896  
 2 Abies_balsamea                              2. 0.990  
 3 Abies_borisii-regis                         1. 0.940  
 4 Alcea_rosea                                 7. 0.972  
 5 Amaranthus_caudatus                         1. 0.173  
 6 Amaranthus_hybridus_subsp._cruentus         1. 0.310  
 7 Aquilegia_vulgaris                          9. 0.365  
 8 Arabidopsis_thaliana                        8. 0.00280
 9 Arabis_alpina                               2. 0.978  
10 Ariocarpus_fissuratus                       1. 0.930  
# ... with 126 more rows


cd[[100]]
Comparative dataset of 136 taxa:
Phylogeny: tree 
   136 tips, 134 internal nodes
   chr [1:136] "Mercurialis_annua" "Manihot_esculenta" 
"Malpighia_emarginata" "Comarum_palustre" ...
VCV matrix present:
   VCV.array [1:136, 1:136, 1:16] 61.9 189.3 189.3 189.3 189.3 ...
Data: as.data.frame(obj[[x]]) 
   $ herbivores: num [1:136] 4 1 1 5 19 21 7 4 4 2 ...
   $ tm        : num [1:136] 0.516 0.915 1.013 0.46 0.236 ...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-18 14:46:52

由于cd是从obj创建的,因此不需要在lapply调用中引用obj,而只需传递您可以通过对象执行的comparative.data列表:

代码语言:javascript
复制
# BELOW d IS DATA FRAME OBJECT PASSED INTO LAPPLY LOOP
pg_list <- lapply(cd, function(d) pgls(formula = y ~ x, d, lambda = "ML"))

或按指数:

代码语言:javascript
复制
# BELOW i IS INTEGER VALUE PASSED INTO LAPPLY LOOP
pg_list <- lapply(seq_along(cd), function(i) pgls(formula = y ~ x, cd[[i]], lambda = "ML"))

或者,您可以组合这两个lapply调用,前提是您不需要中间对象cd列表用于其他目的:

代码语言:javascript
复制
# BELOW x IS OBJECT PASSED INTO LAPPLY LOOP
pg_list  <- lapply(obj, function(x) {    
                   cd <- comparative.data(phy = phylogeny, 
                                          data = as.data.frame(x), 
                                          names.col = species_name,
                                          vcv=T, vcv.dim=3))

                   pgls(formula = y ~ x, cd, lambda = "ML")
            })
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53834296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档