Hi, I am trying to create the assignment function: "substring<-" <- function(text, first, last=100000, sub) { if(is.character(first)) { if(!missing(last)) stop('wrong # arguments') return(sedit(text, first, sub)) } lf <- length(first) if(length(text)==1 && lf > 1) { if(missing(last)) last <- nchar(text) last <- rep(last, length=lf) for(i in 1:lf) { text <- paste(if(first[i]>1) substring(text, 1, first[i]-1), sub, substring(text, last[i]+1), sep='') if(i < lf) { j <- (i+1):lf w <- nchar(sub) - (last[i]-first[i]+1) first[j] <- first[j] + w last[j] <- last[j] + w } } return(text) } res <- paste(ifelse(first>1,substring(text, 1, first-1),''), sub, substring(text, last+1), sep='') res } Checking> x <- 'this string' > substring(x, 3, 4) <- 'IS'will not result in> x [1] "thIS string"but will cry Error in substr<-(*tmp*, 3, 4, value = "IS") : unused argument(s) (value ...) A cat(is.character(first),"\n") after the first line will not even be executed. Thanks for help. --christian Dr.sc.math.Christian W. Hoffmann Mathematics and Statistical Computing Landscape Modeling and Web Applications Swiss Federal Research Institute WSL Zuercherstrasse 111 CH-8903 Birmensdorf, Switzerland phone: ++41-1-739 22 77 fax: ++41-1-739 22 15 e-mail: Hoffmann at WSL.CH www: wsl.ch/staff/christian.hoffmann -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
Christian Hoffmann <christian.hoffmann at wsl.ch> writes:> Hi, > > I am trying to create the assignment function: > "substring<-" <- function(text, first, last=100000, sub) {....> Checking > > x <- 'this string' > > substring(x, 3, 4) <- 'IS' > > will not result in > > x [1] "thIS string" > > but will cry > Error in substr<-(*tmp*, 3, 4, value = "IS") : > unused argument(s) (value ...) > > A cat(is.character(first),"\n") after the first line will not even be > executed.For reasons that I have forgotten, the value of an assignment function is always passed using an argument called "value", so try changing "sub" to "value". (I haven't *completely* forgotten the reason. It is something with assignment functions like "[<-.data.frame" taking a variable number of arguments.) -- O__ ---- Peter Dalgaard Blegdamsvej 3 c/ /'_ --- Dept. of Biostatistics 2200 Cph. N (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907 -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
The last argument of any assignment function has to be named `value'. This is different from S, and is in the FAQ, section 3.3.3.> Date: Wed, 14 Feb 2001 11:09:36 +0100 > To: R Help list <r-help at stat.math.ethz.ch> > From: Christian Hoffmann <christian.hoffmann at wsl.ch> > Subject: [R] assignment function > > Hi, > > I am trying to create the assignment function: > "substring<-" <- function(text, first, last=100000, sub) { > if(is.character(first)) { > if(!missing(last)) stop('wrong # arguments') > return(sedit(text, first, sub)) > } > > lf <- length(first) > > if(length(text)==1 && lf > 1) { > if(missing(last)) last <- nchar(text) > last <- rep(last, length=lf) > for(i in 1:lf) { > text <- paste(if(first[i]>1) > substring(text, 1, first[i]-1), sub, > substring(text, last[i]+1), sep='') > if(i < lf) { > j <- (i+1):lf > w <- nchar(sub) - (last[i]-first[i]+1) > first[j] <- first[j] + w > last[j] <- last[j] + w > } > } > return(text) > } > res <- paste(ifelse(first>1,substring(text, 1, first-1),''), sub, > substring(text, last+1), sep='') > res > } > > Checking > > x <- 'this string' > > substring(x, 3, 4) <- 'IS' > > will not result in > > x [1] "thIS string" > > but will cry > Error in substr<-(*tmp*, 3, 4, value = "IS") : > unused argument(s) (value ...) > > A cat(is.character(first),"\n") after the first line will not even be > executed. > > > Thanks for help. > --christian > > Dr.sc.math.Christian W. Hoffmann > Mathematics and Statistical Computing > Landscape Modeling and Web Applications > Swiss Federal Research Institute WSL > Zuercherstrasse 111 > CH-8903 Birmensdorf, Switzerland > phone: ++41-1-739 22 77 fax: ++41-1-739 22 15 > e-mail: Hoffmann at WSL.CH > www: wsl.ch/staff/christian.hoffmann > >-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-> r-help mailing list -- Read ci.tuwien.ac.at/~hornik/R/R-FAQ.html > Send "info", "help", or "[un]subscribe" > (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch >_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._ -- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, stats.ox.ac.uk/~ripley University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272860 (secr) Oxford OX1 3TG, UK Fax: +44 1865 272595 -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._