我工作的企业一直都在做ELISA分析(免疫分析),所以我正在编写一个函数,它采用csv格式的机器读取光密度的版本,并运行一个统计回归,称为4PL分析。它本质上是一个4pl的假人功能,利用了drc包。我已经编写了大部分代码,但现在我正在尝试将其实际放入函数格式(它在函数结构之外运行良好)。
这是我的问题。我正在定义函数的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是定义的。
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要么我完全不明白我是如何定义我的形式,要么我遇到了一些非常奇怪的论点,通过问题。有什么想法吗?
发布于 2015-08-07 01:57:14
问题是,您正在用第一行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())只会删除当前环境中的变量(即函数调用堆栈)。在这种情况下,函数将对全局环境中定义的变量使用值。
https://stackoverflow.com/questions/31868493
复制相似问题