2015-08-07 10 views
5

द्वारा नहीं मिला व्यवसाय मैं हर समय ELISA विश्लेषण करता हूं (प्रतिरक्षा परख), और इसलिए मैं एक ऐसा प्रोग्राम प्रोग्रामिंग कर रहा हूं जो मशीन रीडआउट के सीएसवी प्रारूप संस्करण को लेता है ऑप्टिकल घनत्व और 4PL विश्लेषण नामक एक सांख्यिकीय प्रतिगमन चलाता है। यह अनिवार्य रूप से डमीज़ फ़ंक्शन के लिए 4pl है जो ड्रैक पैकेज का उपयोग करता है। मेरे पास सबसे अधिक कोड लिखा गया है, लेकिन अब मैं वास्तव में इसे फ़ंक्शन प्रारूप में डालने का प्रयास कर रहा हूं (यह फ़ंक्शन स्ट्रक्चर के बाहर ठीक है)।उपयोगकर्ता-फ़ंक्शन, फॉर्मल्स ऑब्जेक्ट परिभाषित किया गया है लेकिन कोड

यहां मेरी समस्या है। मैं तो जैसे औपचारिक() मेरी समारोह को परिभाषित करने वाली हूँ:

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 

इसके अलावा, है अगर मैं वैश्विक वातावरण में "~/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 

या तो मैं कर रहा हूँ मिल मैं अपने फॉर्मल्स को परिभाषित करने के तरीके पर पूरी तरह से टैंक कर रहा हूं, या मैं मुद्दों को पारित करने में कुछ अजीब बहस में भाग रहा हूं। कोई विचार?

+0

क्यों 'फ़ाइल' तर्क में पथ शामिल नहीं है? साथ ही, मुझे संदेह है कि यह एक मुद्दा है जिसे आप देख रहे हैं, लेकिन क्या 'क्षैतिज' को वर्ण स्ट्रिंग होने की आवश्यकता है? –

+0

आप सही हैं। एक बार जब मुझे मुख्य समस्या हल हो गई, क्षैतिज को स्ट्रिंग के बजाए ऑब्जेक्ट के रूप में माना जाता था तो अगली बग पहचाना गया था :) – Eich

उत्तर

6

समस्या यह है कि आप अपनी सभी फॉर्मल्स को पहली पंक्ति, 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()) केवल चर को नष्ट करेगा आपके वर्तमान माहौल में (यानी फ़ंक्शन कॉल स्टैक)। इस मामले में, आपका फ़ंक्शन वैश्विक वातावरण में परिभाषित चर के मानों का उपयोग करेगा।

+0

ओमग, मैं एक मूर्ख हूं। मेरे पास कोड में था जब मैं एक समारोह नहीं था जब मैं डीबग करने के लिए तेजी से पुनरावृत्त कर रहा था, और जब मैं इसे सब एक साथ चिपकाया तो मैं इसे भूल गया था। मैं वहां पर इतना ध्यान केंद्रित कर रहा हूं कि शायद फॉर्मल्स और setwd कमांड के बीच सीधा कारण है कि मैं पूरी तरह से अन्य लाइनों से हस्तक्षेप की जांच करना भूल गया। कृपया मेरी लड़ाई-अंधापन से क्षमा करें। यह सिर्फ शर्मनाक है। आंखों का अपना दूसरा सेट होने के लिए धन्यवाद। – Eich

संबंधित मुद्दे