2012-11-12 178 views
1

例如我有兩個變量ab(實際上實際上超過2個),我可以像c(a,b)<-c(0,0)那樣爲它們分配值,就像Python中的元組一樣嗎?謝謝。我可以批量分配變量嗎?

+0

你懶得去嘗試嗎? – 2012-11-12 18:30:41

+0

不,不能指定這種方式 –

+0

@JackManey是的,我試過但沒有通過。我在問同樣的效果的方式。 – ziyuang

回答

2

有沒有內置的方法來做到這一點 - 你要找的東西非常相似,listsRvectors - 而不是調用回abc,你再打a[1]a[2]a[3]。如果你能夠通過不同的名字叫回這個值,並能夠從同一行中指定他們是很重要的,你可以做一個簡單的函數:

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 

我無法找出一個讓apply家族解決這個問題的方法不會太複雜 - 也許有人可以幫助我。

+1

'Assign < - function(Names,Values){sapply(seq_along(Names),function(i){assign(Names [i],Values [i],envir = .GlobalEnv)}); invisible() }'不要太複雜 - 只需在索引的向量上使用'sapply'或'lapply'並創建一個匿名函數來完成實際的任務。我把無形的東西放在那裏,使它更好一些。 – Dason

+0

謝謝 - 我從來沒有嘗試過'seq_along' - 似乎是一個真正需要'for'循環的任務的好替代方案,但容易受到循環帶來的不利影響。 –

+4

或'mapply(assign,Names,Values,MoreArgs = list(envir = .GlobalEnv))' – flodel

1

您可以使用%=%作爲解釋in this question (你必須複製並粘貼四大功能)

# 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" 
+0

感謝您的鏈接 - 看起來像這個問題應該可能作爲副本關閉。 – Dason

相關問題