2010-09-04 23 views
5

मैं अपने डेटा के कुछ प्रसंस्करण, इस तरह के लिए एक समारोह बनाया:वैश्विक चर

a <- "old" 
test <- function (x) { 
    assign(x, "new", envir = .GlobalEnv) 
} 
test(a) 

लेकिन मैं से "पुराने" के लिए "नया", मैं इस लगता है कोई परिवर्तन नहीं देख सकते हैं कुछ "वैश्विक परिवर्तनीय" है, कोई सुझाव?

धन्यवाद!

+4

सबसे पहले, ऐसा न करें - कार्यों के साथ एक वैश्विक वातावरण में गड़बड़ करना लगभग हमेशा एक बुरा विचार है जो यादृच्छिक ओवरराइट्स की ओर जाता है, बग और समग्र अराजकता को ट्रैक करना मुश्किल होता है। – mbq

उत्तर

7
assign(x,value) के लिए

, एक्स एक चर इसके बारे में मूल्य नहीं के नाम होने की जरूरत है, तो एक्स चरित्र रूप में होना चाहिए: assign("a","new"), और क्रम में अपने समारोह में इस्तेमाल किया जाएगा , कोशिश:

test <- function (x) 
{ 
    assign(deparse(substitute(x)), "new", envir = .GlobalEnv) 
} 
अपने मामले में

, आप इसे करने के लिए "पुराने" नाम के एक चर creat और आवंटित 'नई' होगा:

> old 
[1] "new" 
+1

या मूल कोड के साथ सिर्फ एक 'परीक्षण ("ए") '। – Marek

2

आप sapply समारोह के साथ, जैसे अपने कार्य जोड़ सकता:

require (plyr) 
b <- sapply (a, test) 
b 
    old 
"new" 

कि जिस तरह से आप अपने a वेक्टर की वास्तविक तत्व करने के लिए अपने समारोह आवेदन कर रहे हैं - के रूप में romunov अपने जवाब में बताया।

एक और उदाहरण के लिए:

a <- c("old", "oold", "ooold", "oooold") 
b <- sapply (a, test) 
b 
    old oold ooold oooold 
"new" "new" "new" "new" 
+1

कौन सा प्लीयर फ़ंक्शन है? – hatmatrix

+0

@ स्टीफन: ओह हाँ, ठीक है। 'sapply' आधार पैकेज से है - इसे ठीक किया गया। प्लीयर फ़ंक्शन हमेशा एक 'पी' के साथ नामित होता है। – mropa

संबंधित मुद्दे