用户函数,形式对象已定义但未被代码找到
User-Function, formals object defined but not found by code
我工作的企业一直在进行 ELISA 分析(免疫测定),因此我正在编写一个函数,该函数采用机器读出的 csv 格式版本的光密度并运行称为 a 的统计回归4PL分析。它本质上是一个使用 drc 包的 4pl for dummies 函数。我已经编写了大部分代码,但现在我正在尝试将其实际放入函数格式(它在函数结构之外运行良好)。
这是我的问题。我像这样定义函数的 formals():
elisa<-function(file="data.csv",wd="~/Desktop",standards=c(1,2),orient=horizontal,
limit=TRUE,graph.4pl=FALSE,Conc.graph=FALSE){ body of function}
目前其他正式形式不是特别重要,但我 运行 有两个问题。这是块第一部分的代码。
rm(list=ls())
setwd(wd)
library(drc);library(reshape2);library(ggplot2)
data<-read.csv(file,head=TRUE, colClasses=c("character"))
如果社区认为我需要添加更多内容,我会添加,但我们暂时保留它。
问题:
elisa("Mock data.csv")
Error in setwd(wd[1]) : object 'wd' not found
显示此错误。正如您所看到的,wd IS defined
formals(elisa)
$file
[1] "data.csv"
$wd
[1] "~/Desktop"
$standards
c(1, 2)
$orient
horizontal
$limit
[1] TRUE
$graph.4pl
[1] FALSE
$Conc.graph
[1] FALSE
此外,如果我在全局环境中将 wd 预定义为 "~/Desktop"
,wd 的错误就会消失,但我得到了这个
wd<-"~/Desktop"
elisa("Mock data.csv")
Error in read.table(file = file, header = header, sep = sep, quote = quote, :
'file' must be a character string or connection
要么我完全在思考我如何定义我的形式,要么我 运行 陷入一些非常奇怪的参数传递问题。有什么想法吗?
问题是您要删除第一行的所有形式,rm(list=ls())
。
例如:
f <- function(a=1) {
rm(list=ls())
print(a)
}
f()
## Error in print(a) : object 'a' not found
当您在全局环境中定义 wd
时(即在函数上方的堆栈中),您的函数将起作用(至少到那时为止),因为 rm(list=ls())
只会删除其中的变量您当前的环境(即函数调用堆栈)。在这种情况下,您的函数将使用全局环境中定义的变量的值。
我工作的企业一直在进行 ELISA 分析(免疫测定),因此我正在编写一个函数,该函数采用机器读出的 csv 格式版本的光密度并运行称为 a 的统计回归4PL分析。它本质上是一个使用 drc 包的 4pl for dummies 函数。我已经编写了大部分代码,但现在我正在尝试将其实际放入函数格式(它在函数结构之外运行良好)。
这是我的问题。我像这样定义函数的 formals():
elisa<-function(file="data.csv",wd="~/Desktop",standards=c(1,2),orient=horizontal,
limit=TRUE,graph.4pl=FALSE,Conc.graph=FALSE){ body of function}
目前其他正式形式不是特别重要,但我 运行 有两个问题。这是块第一部分的代码。
rm(list=ls())
setwd(wd)
library(drc);library(reshape2);library(ggplot2)
data<-read.csv(file,head=TRUE, colClasses=c("character"))
如果社区认为我需要添加更多内容,我会添加,但我们暂时保留它。
问题:
elisa("Mock data.csv")
Error in setwd(wd[1]) : object 'wd' not found
显示此错误。正如您所看到的,wd IS defined
formals(elisa)
$file
[1] "data.csv"
$wd
[1] "~/Desktop"
$standards
c(1, 2)
$orient
horizontal
$limit
[1] TRUE
$graph.4pl
[1] FALSE
$Conc.graph
[1] FALSE
此外,如果我在全局环境中将 wd 预定义为 "~/Desktop"
,wd 的错误就会消失,但我得到了这个
wd<-"~/Desktop"
elisa("Mock data.csv")
Error in read.table(file = file, header = header, sep = sep, quote = quote, :
'file' must be a character string or connection
要么我完全在思考我如何定义我的形式,要么我 运行 陷入一些非常奇怪的参数传递问题。有什么想法吗?
问题是您要删除第一行的所有形式,rm(list=ls())
。
例如:
f <- function(a=1) {
rm(list=ls())
print(a)
}
f()
## Error in print(a) : object 'a' not found
当您在全局环境中定义 wd
时(即在函数上方的堆栈中),您的函数将起作用(至少到那时为止),因为 rm(list=ls())
只会删除其中的变量您当前的环境(即函数调用堆栈)。在这种情况下,您的函数将使用全局环境中定义的变量的值。