[R] Create macro_var in R

MacQueen, Don macqueen1 at llnl.gov
Fri Feb 5 18:47:09 CET 2016


Yes, you can use a name stored in a variable to create a new column in a
data frame (guessing that's what you want). Here's an example:

> df <- data.frame(a=1:5)
> df[['b']] <- 2:6
> df
  a b
1 1 2
2 2 3
3 3 4
4 4 5
5 5 6
> mvar <- 'c'
> df[[mvar]] <- 0:4
> df
  a b c
1 1 2 0
2 2 3 1
3 3 4 2
4 4 5 3
5 5 6 4


In your case, the object named "new.tab" does not exist when you try to
create a new variable in it. That's what the error message says.

Try, perhaps,

new.tab <- tab
new.tab[[mvar]] <- d$pop


(and hope that the number of elements in d$pop is the same as the number
of rows in new.tab)

-Don


-- 
Don MacQueen

Lawrence Livermore National Laboratory
7000 East Ave., L-627
Livermore, CA 94550
925-423-1062





On 2/5/16, 8:53 AM, "R-help on behalf of Amoy Yang via R-help"
<r-help-bounces at r-project.org on behalf of r-help at r-project.org> wrote:

>
>
> One more question (see below). I cannot use macro-var, mvar, for
>creating new name, as shown below. Any advice is highly appreciated!
>
>> mvar<-"pop"
>> new.pop<-tab[[mvar]]; new.pop
> [1]  698 1214 1003 1167 2549  824  944 1937  935  570    0
>> new.tab[[mvar]]<-d$pop;
>Error in new.tab[[mvar]] <- d$pop : object 'new.tab' not found
>
>    On Thursday, February 4, 2016 11:02 AM, Amoy Yang <amoy_y at yahoo.com>
>wrote:
> 
>
> This works although it looks rare by using min(",key,"). Don't know why
>but just have to remember it. This is a tough part in R.
>Thanks for helps!
>Amoy 
>
>    On Wednesday, February 3, 2016 5:25 PM, Gabor Grothendieck
><ggrothendieck at gmail.com> wrote:
> 
>
> See
>
>  Example 5.  Insert Variables
>
>on the sqldf home page.
>
>  https://github.com/ggrothendieck/sqldf
>
>
>On Wed, Feb 3, 2016 at 2:16 PM, Amoy Yang via R-help
><r-help at r-project.org> wrote:
>> First, MVAR<-c("population) should be the same as "population'".
>>Correct?
>> You use tab[[MVAR]] to refer to "population" where double [[...]]
>>removes double quotes "...", which seemingly work for r-code although it
>>is tedious in comparison direct application in SAS %let MVAR=population.
>>But it does not work for sqldef in R as shown below.
>>
>>> key<-"pop"
>>> library(sqldf)
>>> sqldf("select grade, count(*) as cnt, min(tab[[key]]) as min,
>> + max(pop) as max, avg(pop) as mean, median(pop) as median,
>> + stdev(pop) as stdev from tab group by grade")
>> Error in sqliteSendQuery(con, statement, bind.data) :
>>  error in statement: near "[[key]": syntax error
>>
>>
>>
>>
>>    On Wednesday, February 3, 2016 12:40 PM, "ruipbarradas at sapo.pt"
>><ruipbarradas at sapo.pt> wrote:
>>
>>
>>  Hello,
>>
>> You can't use tab$MVAR but you can use tab[[MVAR]] if you do MVAR <-
>>"population" (no need for c()).
>>
>> Hope this helps,
>>
>> Rui Barradas
>>  Citando Amoy Yang via R-help <r-help at r-project.org>:
>> population is the field-name in data-file (say, tab). MVAR<-population
>>takes data (in the column of population) rather than field-name as done
>>in SAS:  %let MVAR=population;
>> In the following r-program, for instance, I cannot use ...
>>tab$MVAR...or simply MVAR itself since MVAR is defined as "population"
>>with double quotes if using MVAR<-c("population")
>>
>>    On Wednesday, February 3, 2016 11:54 AM, Duncan Murdoch
>><murdoch.duncan at gmail.com> wrote:
>>
>>
>> On 03/02/2016 12:41 PM, Amoy Yang via R-help wrote:
>>  There is a %LET statement in SAS: %let MVAR=population; Thus, MVAR can
>>be used through entire program.
>> In R, I tried MAVR<-c("population"). The problem is that MAVR comes
>>with double quote "...." that I don't need. But MVAR<-c(population) did
>>NOT work out. Any way that double quote can be removed as done in SAS
>>when creating macro_var?
>> Thanks in advance for helps!
>> R doesn't have a macro language, and you usually don't need one.
>>
>> If you are only reading the value of population, then
>>
>> MAVR <- population
>>
>> is fine.  This is sometimes the same as c(population), but in general
>> it's different:  c() will remove some attributes, such as
>> the dimensions on arrays.
>>
>> If you need to modify it in your program, it's likely more complicated.
>> The normal way to go would be to put your code in a function, and have
>> it return the modified version.  For example,
>>
>> population <- doModifications(population)
>>
>> where doModifications is a function with a definition like
>>
>> doModifications <- function(MAVR) {
>>    # do all your calculations on MAVR
>>    # then return it at the end using
>>    MAVR
>> }
>>
>> Duncan Murdoch
>>
>>
>>
>>        [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help at 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.htmlandprovide commented,
>>minimal, self-contained, reproducible code.
>>
>>
>>
>>
>>        [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help at 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.
>
>
>
>-- 
>Statistics & Software Consulting
>GKX Group, GKX Associates Inc.
>tel: 1-877-GKX-GROUP
>email: ggrothendieck at gmail.com
>
>   
>
>   
>
>  
>	[[alternative HTML version deleted]]
>
>______________________________________________
>R-help at 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