Eic*_*ich 5 arguments r function argument-passing
我工作的业务一直进行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}
Run Code Online (Sandbox Code Playgroud)
其他形式目前的情况并不是特别重要,但我遇到了两个问题.这是块的第一部分的代码.
rm(list=ls())
setwd(wd)
library(drc);library(reshape2);library(ggplot2)
data<-read.csv(file,head=TRUE, colClasses=c("character"))
Run Code Online (Sandbox Code Playgroud)
如果社区的智慧认为我需要包括更多,我会,但现在就让它留在那里.
问题:
elisa("Mock data.csv")
Error in setwd(wd[1]) : object 'wd' not found
Run Code Online (Sandbox Code Playgroud)
出现此错误.正如您所看到的,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
Run Code Online (Sandbox Code Playgroud)
而且,如果我"~/Desktop"在全局环境中预定义wd ,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
Run Code Online (Sandbox Code Playgroud)
要么我完全沉溺于我如何定义我的形式,要么我遇到一些非常奇怪的论点传递问题.有任何想法吗?
问题是你要删除第一行的所有正式文件,rm(list=ls()).
例如:
f <- function(a=1) {
rm(list=ls())
print(a)
}
f()
## Error in print(a) : object 'a' not found
Run Code Online (Sandbox Code Playgroud)
当您wd在全局环境中定义时(即在函数上方的堆栈中),您的函数将起作用(至少在此之前),因为rm(list=ls())只会删除当前环境中的变量(即函数调用堆栈).在这种情况下,您的函数将使用全局环境中定义的变量的值.