在以下问题上我需要帮助。
我生成了一个包含1000个comparative.data的列表,我希望使用每个comparative.data运行1000个pgls。为此,我尝试使用lapply函数,使用以下代码:
pg <- lapply(obj, function(z){pgls(formula = y ~ x, cd[[z]], lambda = "ML")})obj是一个包含1000 data.frames和我的数据的列表。cd是我列出的1000 comparative.data的列表。
当我试图运行此代码时,以下错误返回:
Error in pgls(formula = y ~ x, cd[[z]], lambda = "ML") :
object 'z' not found我看不出错误的来源在哪里
提前感谢
更多信息
obj用于生成comparative.data。为了使用comparative.data列表中的1000个数据帧生成1000个obj,我使用了:
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,代码是:
mod <- pgls(formula = y ~ x, cd[[100]], lambda = "ML")obj 调用第一百和第一百
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 ...发布于 2018-12-18 14:46:52
由于cd是从obj创建的,因此不需要在lapply调用中引用obj,而只需传递您可以通过对象执行的comparative.data列表:
# BELOW d IS DATA FRAME OBJECT PASSED INTO LAPPLY LOOP
pg_list <- lapply(cd, function(d) pgls(formula = y ~ x, d, lambda = "ML"))或按指数:
# 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列表用于其他目的:
# 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")
})https://stackoverflow.com/questions/53834296
复制相似问题