我在R中开发了一些利用uniroot.all()
功能进行剂量反应分析的功能。说我有一个功能,如:
library(rootSolve)
library(plyr)
examplefunction <- function(x){
adply(mtcars, 1, summarize,
solution <- uniroot(function (a){
mpg + x + a},
interval = c(-100,100)))
}
如果我输入examplefunction(1)
,我会收到错误
Error in f(lower, ...) : object 'x' not found
现在我的函数有几个其他变量和拟合方程,函数用optim()
求解,但我希望这足以解释这个问题。
目前我通过在函数开头全局分配变量来“解决”我的问题,如下所示:
library(rootSolve)
library(plyr)
examplefunction <- function(x){
x2 <<- x
adply(mtcars, 1, summarize,
solution <- uniroot(function (a){
mpg + x2 + a},
interval = c(-100,100)))
}
在我看来,这非常草率。我想做的是允许uniroot.all()
从功能环境而不是全局环境访问x
。
x
用于adply()
之外的部分功能,整个功能与optim()
一起运行,所以我不能在uniroot.all()
内定义它们adply()
函数。
感谢您的帮助。