PGLS returns 在 caper 对象中通过变量的列位置引用变量时出错
PGLS returns an error when referring to variables by their column position in a caper object
我正在对一个植物进化枝的一个性状和 21 个环境变量之间进行 PGLS
。我正在使用循环执行此操作 21 次,每个环境变量一次,并将 p 值和其他一些值提取到结果矩阵中。
通常单独携带每个 PGLS
时,我将通过列名引用变量,例如:
pgls(**trait1**~**meanrainfall**, data=caperobject)
但是为了针对多个环境变量循环此过程,我通过变量在数据框中的列位置(以 PGLS 的 caper 对象的形式)而不是列名称来引用变量:
pgls(**caperobject[,2]**~**caperobject[,5]**, data=caperobject)
这个returns错误:
Error in model.frame.default(formula, data$data, na.action = na.pass) :
invalid type (list) for variable 'caperobject[, 2]'
当运行使用原始数据框进行线性回归时,这不是问题——仅当使用 caper 对象作为使用 [=11 的数据时,通过列名引用变量才会产生此错误=].这种引用列名的方式是否不适用于 Caper 对象?有没有其他方法可以引用列名,以便将它们合并到 PGLS loop
?
您的解决方案是使用 caperobject$data[,2] ~ caperobject$data[,5]
,因为 comparative.data
class 是一个列表,特征值位于列表 data
中。这是一个例子:
library(ape)
library(caper)
# generate random data
seed <- 245937
tr <- rtree(10)
dat <- data.frame(taxa = tr$tip.label,
trait1 = rTraitCont(tr, root.value = 3),
meanrainfall = rnorm(10, 50, 10))
# prepare a comparative.data structure
caperobject <- comparative.data(tr, dat, taxa, vcv = TRUE, vcv.dim = 3)
# run PGLS
pgls(trait1 ~ meanrainfall, data = caperobject)
pgls(caperobject$data[, 1] ~ caperobject$data[, 2], data = caperobject)
截距 = 3.13 和斜率 = -0.003 的两个选项 return 相同。
解决数据格式问题的一个好习惯是检查数据是如何存储的str(caperobject)
。
我正在对一个植物进化枝的一个性状和 21 个环境变量之间进行 PGLS
。我正在使用循环执行此操作 21 次,每个环境变量一次,并将 p 值和其他一些值提取到结果矩阵中。
通常单独携带每个 PGLS
时,我将通过列名引用变量,例如:
pgls(**trait1**~**meanrainfall**, data=caperobject)
但是为了针对多个环境变量循环此过程,我通过变量在数据框中的列位置(以 PGLS 的 caper 对象的形式)而不是列名称来引用变量:
pgls(**caperobject[,2]**~**caperobject[,5]**, data=caperobject)
这个returns错误:
Error in model.frame.default(formula, data$data, na.action = na.pass) :
invalid type (list) for variable 'caperobject[, 2]'
当运行使用原始数据框进行线性回归时,这不是问题——仅当使用 caper 对象作为使用 [=11 的数据时,通过列名引用变量才会产生此错误=].这种引用列名的方式是否不适用于 Caper 对象?有没有其他方法可以引用列名,以便将它们合并到 PGLS loop
?
您的解决方案是使用 caperobject$data[,2] ~ caperobject$data[,5]
,因为 comparative.data
class 是一个列表,特征值位于列表 data
中。这是一个例子:
library(ape)
library(caper)
# generate random data
seed <- 245937
tr <- rtree(10)
dat <- data.frame(taxa = tr$tip.label,
trait1 = rTraitCont(tr, root.value = 3),
meanrainfall = rnorm(10, 50, 10))
# prepare a comparative.data structure
caperobject <- comparative.data(tr, dat, taxa, vcv = TRUE, vcv.dim = 3)
# run PGLS
pgls(trait1 ~ meanrainfall, data = caperobject)
pgls(caperobject$data[, 1] ~ caperobject$data[, 2], data = caperobject)
截距 = 3.13 和斜率 = -0.003 的两个选项 return 相同。
解决数据格式问题的一个好习惯是检查数据是如何存储的str(caperobject)
。