Firma, w której pracuję, wykonuje analizę ELISA przez cały czas (test immunologiczny), a więc programuję funkcję, która pobiera wersję formatu csv odczytu maszyny gęstości optyczne i uruchamia regresję statystyczną zwaną analizą 4PL. Zasadniczo jest to funkcja 4pl for dummies, która korzysta z pakietu drc. Mam większość kodu napisanego, ale teraz próbuję faktycznie umieścić go w formacie funkcji (działa dobrze poza strukturą funkcji).User-Function, zdefiniowany obiekt formalny, ale nie znaleziony przez kod
Oto mój problem. Ja definiowania Formals() z mojej funkcji tak:
elisa<-function(file="data.csv",wd="~/Desktop",standards=c(1,2),orient=horizontal,
limit=TRUE,graph.4pl=FALSE,Conc.graph=FALSE){ body of function}
To nie jest szczególnie ważne, co inni formale są w tej chwili, ale jestem z systemem do dwóch problemów. Oto kod pierwszej części bloku.
rm(list=ls())
setwd(wd)
library(drc);library(reshape2);library(ggplot2)
data<-read.csv(file,head=TRUE, colClasses=c("character"))
Jeśli społeczność w swojej mądrości myśli, że muszę uwzględnić więcej, zrobię to, ale zostawmy to na razie.
Problem:
elisa("Mock data.csv")
Error in setwd(wd[1]) : object 'wd' not found
Ten błąd pojawia się. Jak widać jednak, wd definiuje
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
Ponadto, jeśli predefine WD jako "~/Desktop"
w globalnym środowisku, błąd za wd odchodzi, ale otrzymuję ten
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
Albo jestem całkowicie zbijając z tego, w jaki sposób definiuję moje formalsy, lub napotykam na bardzo dziwne argumenty przemijające. Jakieś pomysły?
Dlaczego nie uwzględnić ścieżki w argumencie "file'? Ponadto, wątpię, żeby to był problem, który widzisz, ale czy "poziomy" muszą być ciągami znaków? –
Masz rację. Kiedy udało mi się rozwiązać główną kwestię, poziome traktowane jako obiekt, a nie ciąg, było kolejnym błędem zidentyfikowanym :) – Eich