未找到 R 变量,但已明确定义

标签 r function

我已经编写了一个函数来运行系统发育广义最小二乘法,一切看起来都应该可以正常工作,但由于某种原因,脚本 (W) 中定义的特定变量不断出现未定义。我盯着这段代码看了好几个小时,想不出问题出在哪里。

有什么想法吗?

myou <- function(alpha, datax, datay, tree){
    data.frame(datax[tree$tip.label,],datay[tree$tip.label,],row.names=tree$tip.label)->dat
    colnames(dat)<-c("Trait1","Trait2")
    W<-diag(vcv.phylo(tree)) # Weights
    fm <- gls(Trait1 ~ Trait2, data=dat, correlation = corMartins(alpha, tree, fixed = TRUE),weights = ~ W,method = "REML")
    return(as.numeric(fm$logLik))
}

corMartins2<-function(datax, datay, tree){
    data.frame(datax[tree$tip.label,],datay[tree$tip.label,],row.names=tree$tip.label)->dat
    colnames(dat)<-c("Trait1","Trait2")
    result <- optimize(f = myou, interval = c(0, 4), datax=datax,datay=datay, tree = tree, maximum = TRUE)
    W<-diag(vcv.phylo(tree)) # Weights
    fm <- gls(Trait1 ~ Trait2, data = dat, correlation = corMartins(result$maximum, tree, fixed =T),weights = ~ W,method = "REML")
    list(fm, result$maximum)}




#test


require(nlme)
require(phytools)
simtree<-rcoal(50)
as.data.frame(fastBM(simtree))->dat1
as.data.frame(fastBM(simtree))->dat2

corMartins2(dat1,dat2,tree=simtree)

返回“eval(expr, envir, enclos) 中的错误:未找到对象‘W’”

即使 W 是专门定义的!

谢谢!

最佳答案

错误发生在 myoucorMatrins2gls 调用中:您必须传入 W 作为dat 中的一列,因为 gls 正在那里寻找它(当您将 weights = ~W 作为公式时,它会寻找 dat$W 却找不到它)。

只需将两个函数中的 data=dat 更改为 data=cbind(dat,W=W)

关于未找到 R 变量,但已明确定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10628124/

相关文章:

r - data.table 聚合遇到 NA 问题

sql - 错误 : return type mismatch in function declared to return

android - onClick() 的函数在下次点击时返回数据,但不会在同一次点击时返回

javascript - 在Javascript中,为什么要用函数来制作对象呢?

r - 将计数标签添加到聚类条形图 ggplot2

r - 如何在 R 中用大数据对多个变量进行一次热编码?

r - ggplot 在只需要一个图例时生成两个图例

r - 确定满足条件的数据点的数量

javascript - 在 JavaScript 中声明函数

c++函数指针声明导致程序在退出时崩溃