[R] Passing variable name

Avi Gross @v|gro@@ @end|ng |rom ver|zon@net
Mon Dec 28 19:51:31 CET 2020


There are endless ways to do what you want, Seyit. If you wish to remain in base R, using the names function on the left-hand side changes the names as in:

names(something) <- c("new", "names")

And in general, you may want to learn how to use an alternate set of methods that work well with ggplot in the tidyverse such as select() that lets you choose which columns of a data.frame (or tibble) to keep while optionally renaming them, and the rename() function and the mutate() function and ways to combine them to do lots of work. They also allow you to not use within() the way you are doing.

It is amusing you want names like V1. Indeed some R functions default to such names.

-----Original Message-----
From: R-help <r-help-bounces using r-project.org> On Behalf Of Seyit Ali KAYIS
Sent: Monday, December 28, 2020 1:32 PM
To: 'Bert Gunter' <bgunter.4567 using gmail.com>; 'R-help' <r-help using r-project.org>; erdogancevher using gmail.com; drjimlemon using gmail.com
Subject: Re: [R] Passing variable name

Hi Bert, 

 

Thanks a lot for informing me regarding the html format of my email. 

 

I also would like to thank to Erdogan CEVHER and Jim LEMON for their kind reply/suggestions. Yes I am aware of names function in R which is not the one I am looking for in here. Let me try to explain in another way.

 

The below part includes data generation, making cross-tab, Chi-Squared test and bar plot through ggplot. 

 

#######################################################################

MyData<-data.frame("Gender" = c("F", "F", "F", "F", "M", "M", "M", "M", "M",     "M", "F", "F"),

                   "Hand" = c("R",   "R", "L", "L", "R", "R", "L", "L", "R",     "R", "L", "L"), 

                   "Gr" = c(1,  2,   1,   2,   1,   2,   1,   2,   1,   2,     1,   2) )



MyData <- within(MyData, {

  Gender  <- factor(Gender)

  Hand <- factor(Hand)

  Gr   <- factor(Gr)

}

)



str(MyData)



library(ggplot2)

  

#################     Part 1   #########################################



MyT <- table(MyData$Gender, MyData$Hand)

print(MyT)



MyChi<- chisq.test(MyT)

print(MyChi)



dMyT <- data.frame(as.table(as.matrix(table(MyData$Gender, MyData$Hand, useNA = "ifany"))))



name2<- c("Gender", "Hand", "Frequency")

names(dMyT) <- name2



ggplot(data = na.omit(dMyT), aes(fill=Hand, y=Frequency, x=Gender)) +

        geom_bar(position="dodge", stat="identity")



###############################################



Let’s say I have hundreds of variables (e.g SNP data). By using above codes I can perform what I need. However , I need to copy/paste variable name(s) for making table, Chi-Square test, and ggplot. This increase the chance of incorrectly copying/pasting variable name(s). What I can do is define variable name(s) earlier and pass that names to making table, Chi-Square test, and ggplot part. I believe there is a way to do it. I tried “paste” function (as below), but it did not work either.



Any comment/help is deeply appreciated.



Kind Regards



Seyit Ali



##############################################

V1 <- "Gender"

V2 <- "Hand"



MyT2 <- table(paste('MyData$',V1), paste('MyData$',V2) )

print(MyT)



MyChi<- chisq.test(MyT)

print(MyChi)



dMyT <- data.frame(as.table(as.matrix(table(paste('MyData$',V1), paste('MyData$',V2), useNA = "ifany"))))

name2<- c(V1, V2, "Frequency")

names(dMyT) <- name2



ggplot(data = na.omit(dMyT), aes(fill=V2, y=Frequency, x=V1)) +

     geom_bar(position="dodge", stat="identity")



#################################################









From: Bert Gunter [mailto:bgunter.4567 using gmail.com] 
Sent: Monday, 28 December 2020 12:08 AM
To: seyitali.kayis using ibu.edu.tr
Cc: R-help <r-help using r-project.org>
Subject: Re: [R] Passing variable name



This is a *plain text* list. As you can see from the included text that I received,  the HTML version that you sent was somewhat mangled by the server. I do not know whether or not enough got through for you to get a helpful reply, but if not, re-send *to the list, not me* in *plain text*.  




Bert Gunter

"The trouble with having an open mind is that people keep coming along and sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )





On Sun, Dec 27, 2020 at 12:25 PM Seyit Ali KAYIS <seyitali.kayis using ibu.edu.tr <mailto:seyitali.kayis using ibu.edu.tr> > wrote:

Dear R users,

 �

I have a data frame as below. In part 1, I have created a table for Gender and Hand, performed Chi-Square test and made graph using ggplot.

 �

I want to replace the original variable names (Gender and Hand) with V1 and V2 and to be able to perform those things again as in #part 2. Is there a way to be able to replace the original names?

 �

Any help is deeply appreciated

 �

Kind Regards

 �

Seyit Ali 

 �

#############################################################################

 �

MyData<-data.frame("Gender" = c("F",     "F",        "F",        "F",        "M",      "M",              "M",      "M",      "M",      "M",      "F",        "F"),

                   "Hand" = c("R",           "R",        "L",        "L",        "R",        "R",        "L",              "L",        "R",        "R",        "L",        "L"), 

                   "Gr" = c(1,      2,           1,           2,           1,           2,           1,           2,              1,           2,           1,           2) )



MyData <- within(MyData, {

  Gender  <- factor(Gender)

  Hand <- factor(Hand)

  Gr   <- factor(Gr)

}

)

 �

str(MyData)

 �

library(ggplot2)

 �

#################     Part 1  #########################################

 �

MyT <- table(MyData$Gender, MyData$Hand)

print(MyT)

 �

MyChi<- chisq.test(MyT)

print(MyChi)

dMyT <- data.frame(as.table(as.matrix(table(MyData$Gender, MyData$Hand, useNA = "ifany"))))

name2<- c("Gender", "Hand", "Frequency")                                           

names(dMyT) <- name2

 �

ggplot(data = na.omit(dMyT), aes(fill=Hand, y=Frequency, x=Gender)) + 

    geom_bar(position="dodge", stat="identity")

 �

#################  Part 2   ################

 �

# I want to be able to pass Gender and Hand as V1 and V2 , respectively to

# table, Chi-Square test and ggplot

 �

V1 <- "Gender" 

V2 <- "Hand"

 �

MyT2 <- table(MyData$V1, MyData$V2)

 �

print(MyT)

 �

MyChi<- chisq.test(MyT)

print(MyChi)

dMyT <- data.frame(as.table(as.matrix(table(MyData$V1, MyData$V2, useNA = "ifany"))))

name2<- c(V1, V2, "Frequency")                                           

names(dMyT) <- name2

 �

ggplot(data = na.omit(dMyT), aes(fill=V2, y=Frequency, x=V1)) + 

    geom_bar(position="dodge", stat="identity")

 �

 �

 �

 �

----------------------------------------------------

Dr. Seyit Ali KAYIS

Bolu Abant Izzet Baysal University, Faculty of Medicine

Department of Biostatistics and Medical Informatics

Bolu, Turkey



 <mailto:s_a_kayis using yahoo.com <mailto:s_a_kayis using yahoo.com> > s_a_kayis using yahoo.com <mailto:s_a_kayis using yahoo.com> ,  <mailto:s_a_kayis using hotmail.com <mailto:s_a_kayis using hotmail.com> > s_a_kayis using hotmail.com <mailto:s_a_kayis using hotmail.com> 

Tel: +90 374 254 30 32 Mobile: +90 535 587 1139



Greetings from Bolu, Turkey

------------------------------------------------------ 

 �


        [[alternative HTML version deleted]]

______________________________________________
R-help using r-project.org <mailto:R-help using r-project.org>  mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


	[[alternative HTML version deleted]]

______________________________________________
R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list