[R] use name (not values!) of a dataframe inside a funktion
PIKAL Petr
petr.pikal at precheza.cz
Fri Feb 1 09:32:03 CET 2013
Hi
Maybe others can help you but here is my comment. I already use R for many years and never used such construction. Objects in global environment shall not be modified by functions it is a bad practice. Imagine you have some data frame you prepared and controlled in many steps and use some function from a package.
If this function scrambles object without warning and the result cannot be easily repaired I would be tempted to curse the function with many nasty four letter words.
When I want to change some data by a function I use
fff <- function(x, no=2) {
x[,no]<-factor(x[, no])
x
}
dfb.f <- fff(dfb)
In this case I will end with old object dfb and new object dfb.f. Of course it is possible to use
dfb <- fff(dfb)
and in this case dfb object is changed
Petr
> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> project.org] On Behalf Of Winfried Moser
> Sent: Thursday, January 31, 2013 3:35 PM
> To: r-help
> Subject: [R] use name (not values!) of a dataframe inside a funktion
>
> Dear Listers,
>
> can anyone help me, please.
>
> Since several days i try to figure out, how to assign values, vectors,
> functions etc to variables with dynamically generated names inside of
> functions.
> Sometimes I succeed, but the success is rather arbitrary, it seems. up
> to now i don't fully understand, why things like get, assign, <<- etc
> do sometimes work, and sometimes not.
>
> here's one of my daily examples, i am stuck with: Example 1 does work,
> but example 2 doesn't?
> How kann i tell R, that i want it to expand the string "dfb" to
> "dfb[,2]"
> inside the function.
> In the end i want the function to change the second variable of the
> dataframe dfb permanently to factor (not just inside the function).
>
> Thanks in advance!
>
> Winfried
>
>
> Example 1:
> dfa <- data.frame(a=c(1:4),b=c(1:4))
> dfa[,2] <- factor(dfa[,2])
> is.factor(dfa[,2])
> >TRUE
>
> Example 2:
> dfb <- data.frame(a=c(1:4),b=c(1:4))
> f.fact <- function(x) {x[,2] <<- factor(x[,2])}
> f.fact(dfb)
> is.factor(dfb[,2])
> >FALSE
>
>
> PS: I tried a whole lot of other things like, ...
> I really don't know where to keep on searching.
>
>
> dfb <- data.frame(a=c(1,2,3,4),b=c(1,2,3,4))
> f.fact <- function(x) {get(x)[,2] <<- factor(get(x)[,2])}
> f.fact("dfb")
> is.factor(dfb[,2])
> > "Object 'x' nicht gefunden
>
> dfb <- data.frame(a=c(1,2,3,4),b=c(1,2,3,4))
> f.fact <- function(x) {get(x[,2]) <<- factor(x[,2])}
> f.fact(dfb)
> is.factor(dfb[,2])
> > "Object 'x' nicht gefunden
>
> dfb <- data.frame(a=c(1,2,3,4),b=c(1,2,3,4))
> f.fact <- function(x) {get(x)[,2] <<- factor(x[,2])}
> f.fact(dfb)
> is.factor(dfb[,2])
> > "Object 'x' nicht gefunden
>
> dfb <- data.frame(a=c(1,2,3,4),b=c(1,2,3,4))
> f.fact <- function(x) {assign(x[,2], factor(x[,2]))}
> f.fact(dfb)
> is.factor(dfb[,2])
> > Ungültiges erstes Argument
>
> dfb <- data.frame(a=c(1,2,3,4),b=c(1,2,3,4))
> f.fact <- function(x) {quote(x)[,2], factor(x[,2])}
> f.fact(dfb)
> is.factor(dfb[,2])
> > Unerwartetes ','
>
> dfb <- data.frame(a=c(1,2,3,4),b=c(1,2,3,4))
> f.fact <- function(x) {
> name <- paste0(quote(x),"[,2]")
> assign(name, factor(x[,2]))}
> f.fact(dfb)
> is.factor(dfb[,2])
> > FALSE
>
> dfb <- data.frame(a=c(1,2,3,4),b=c(1,2,3,4))
> f.fact <- function(x) {
> name <- paste0(get(x),"[,2]")
> assign(name, factor(x[,2]))}
> f.fact("dfb")
> is.factor(dfb[,2])
> > Falsche Anzahl von Dimensionen
>
> dfb <- data.frame(a=c(1,2,3,4),b=c(1,2,3,4))
> f.fact <- function(x) {
> name <- paste0(x,"[,2]")
> assign(name, factor(x[,2]))}
> f.fact("dfb")
> is.factor(dfb[,2])
> > Falsche Anzahl von Dimensionen
>
> ächz ...
>
> [[alternative HTML version deleted]]
More information about the R-help
mailing list