1

For example I have 2 variables a and b (actually more than 2 in my real case), can I assign values for them in a way like c(a,b)<-c(0,0), just like the Tuple in Python? Thank you.

Ziyuan
  • 3,857
  • 4
  • 40
  • 74
  • @JackManey Yes I tried but didn't get through. I am asking ways of assignment with the same effect. – Ziyuan Nov 12 '12 at 18:38
  • If you want to assign them to all be the same value (i.e. 0 in your example), you can do `a = b = 0`. But there isn't an equivalent to tuple unpacking in R. – David Robinson Nov 12 '12 at 18:43
  • Please see [this question](http://stackoverflow.com/questions/7519790/assign-multiple-new-variables-in-a-single-line-in-r) – Ricardo Saporta Nov 12 '12 at 23:13

2 Answers2

2

There's no built in way to do it - what you're looking for is very similar to lists and vectors in R - instead of calling back a, b, and c, you call back a[1], a[2], and a[3]. If it's important for you to be able to call back this values by separate names, and to be able to assign them from the same line, you can make a simple function:

Assign <- function(Names, Values) {
             for(i in 1:length(Names)){
                  assign(Names[i], Values[i], envir=.GlobalEnv)
             }}

>A <- c("a", "b", "c", "d")
>B <- c(0,4,2,3)
>Assign(A,B)
>c
#[1] 2

I couldn't figure out a way for the apply family to tackle this one without making it too complicated - maybe someone could help me out.

Señor O
  • 16,529
  • 2
  • 42
  • 45
1

You can use %=% as explained in this question (you have to copy and paste the four functions)

# Example Call;  Note the use of g()  AND  `%=%`
#     Right-hand side can be a list or vector
g(a, b, c)  %=%  list("hello", 123, list("apples, oranges"))

# Results: 
> a
[1] "hello"
> b
[1] 123
> c
[[1]]
[1] "apples, oranges"
Community
  • 1
  • 1
Ricardo Saporta
  • 52,793
  • 14
  • 136
  • 168
  • Thanks for the link - looks like this question should probably be closed as a duplicate. – Dason Nov 13 '12 at 00:12