我需要以下问题的帮助。
我生成了一个包含1000 comparative.data
的列表,并且我想使用每个pgls
来运行1000 comparative.data
。我尝试通过以下代码使用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))
要以百分之一的pgls
运行一个comparative.data
,代码是:
mod <- pgls(formula = y ~ x, cd[[100]], lambda = "ML")
呼叫百分obj
和百分cd
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 ...
答案 0 :(得分:0)
由于 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"))
或者,假设不需要其他目的的中间对象 cd 列表,则可以合并两个lapply
调用:
# 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")
})