首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用户函数,formals对象定义,但未被代码找到。

用户函数,formals对象定义,但未被代码找到。
EN

Stack Overflow用户
提问于 2015-08-07 01:49:22
回答 1查看 243关注 0票数 5

我工作的企业一直都在做ELISA分析(免疫分析),所以我正在编写一个函数,它采用csv格式的机器读取光密度的版本,并运行一个统计回归,称为4PL分析。它本质上是一个4pl的假人功能,利用了drc包。我已经编写了大部分代码,但现在我正在尝试将其实际放入函数格式(它在函数结构之外运行良好)。

这是我的问题。我正在定义函数的formals()如下:

代码语言:javascript
运行
复制
elisa<-function(file="data.csv",wd="~/Desktop",standards=c(1,2),orient=horizontal,
limit=TRUE,graph.4pl=FALSE,Conc.graph=FALSE){ body of function}

现在其他的形式并不特别重要,但我遇到了两个问题。以下是该块第一部分的代码。

代码语言:javascript
运行
复制
rm(list=ls())
setwd(wd)
library(drc);library(reshape2);library(ggplot2)

data<-read.csv(file,head=TRUE, colClasses=c("character"))

如果社会的智慧认为我需要包括更多,我会的,但让我们暂且不谈。

问题是:

代码语言:javascript
运行
复制
elisa("Mock data.csv")
Error in setwd(wd[1]) : object 'wd' not found

就会出现这个错误。正如您所看到的,wd是定义的。

代码语言:javascript
运行
复制
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的错误就会消失,但我得到了以下结果

代码语言:javascript
运行
复制
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

要么我完全不明白我是如何定义我的形式,要么我遇到了一些非常奇怪的论点,通过问题。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-07 01:57:14

问题是,您正在用第一行rm(list=ls())删除所有表单。

例如:

代码语言:javascript
运行
复制
f <- function(a=1) {
  rm(list=ls())
  print(a)
}
f()
## Error in print(a) : object 'a' not found

当您在全局环境中定义wd时(即在函数上面的堆栈中),您的函数将工作(至少到那时为止),因为rm(list=ls())只会删除当前环境中的变量(即函数调用堆栈)。在这种情况下,函数将对全局环境中定义的变量使用值。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31868493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档