मक्खी पर चर नाम कैसे दें?


96

क्या मक्खी पर नए चर नाम बनाना संभव है?

मैं अंत में संख्याओं के साथ नए चर में एक सूची से डेटा फ़्रेम पढ़ना चाहता हूं। Orca1, orca2, orca3 जैसे कुछ ...

अगर मैं कुछ ऐसा करने की कोशिश करता हूं

paste("orca",i,sep="")=list_name[[i]]

मुझे यह त्रुटि मिलती है

target of assignment expands to non-language object

क्या इसके आसपास कोई और तरीका है?


10
जब तक हम r-faq टैग दे रहे हैं तब तक के लिए लिंक दें (FAQ 7.21: cran.r-project.org/doc/FAQ/… )
बेन बोल्कर

जवाबों:


118

उपयोग करें assign:

assign(paste("orca", i, sep = ""), list_name[[i]])

28
यह कैसे करना है। यहाँ एक मेटा-प्रश्न है, जो है, "क्या मुझे यह करना चाहिए?" जवाब लगभग हमेशा "नहीं" है। एक सूची में नामित तत्वों को लगभग हमेशा पसंद किया जाता है।
अरी बी। फ्रीडमैन

26
जवाब लगभग हमेशा "नहीं" को छोड़कर जब यह नहीं है।
शेन

9
ठीक है, बिल्कुल। लेकिन इस जवाब की मांग करने वाले अधिकांश लोग अपने आवेदन के लिए सूची को अस्वीकार करने की स्थिति से ऐसा नहीं कर रहे हैं।
अरी बी। फ्रीडमैन

@ श्री बी। फ्रीडमैन मैं उन डेटासेट्स के लिए वैरिएबल नाम उत्पन्न करता हूं जिन्हें मैं अपने पैकेज / डेटा में सहेजता हूं। प्रत्येक फ़ाइल में एक ही नाम के साथ फ़ाइल और उसमें डेटा (पैकेज में डेटा के लिए आर की सिफारिशें दी गई हैं)। प्रत्येक डेटासेट 10M के बारे में है और कुल ~ 17Go है जिसे मैं शायद ही कोई दूसरा रास्ता देख पाऊं।
cmbarbu

3
क्या कोई कारण है कि आपने उपयोग क्यों नहीं किया paste0?
ब्रूविक

33

यह मेरे लिए है कि आप के बजाय एक सूची के साथ बेहतर हो सकता है का उपयोग कर रहा है orca1, orca2, आदि, ... तो यह होगा orca[1], orca[2]...

आमतौर पर आप चर की एक सूची कुछ भी नहीं बल्कि एक संख्या के आधार पर विभेदित कर रहे हैं क्योंकि यह संख्या बाद में उन्हें एक्सेस करने का एक सुविधाजनक तरीका होगा।

orca <- list()
orca[1] <- "Hi"
orca[2] <- 59

अन्यथा, assignबस वही है जो आप चाहते हैं।


11
मैं सहमत हूँ। आमतौर पर जब लोग सोचते हैं कि वे मक्खी पर चर नाम देना चाहते हैं, तो वे वास्तव में एक अलग संरचना चाहते हैं।
माइकल डन

9
+1 (FAQ 7.21: cran.r-project.org/doc/FAQ/… ) इस पर चर्चा करते हैं
बेन बोल्कर

11

डेटा फ़्रेम न बनाएं। सूची रखें, उसके तत्वों को नाम दें लेकिन इसे संलग्न न करें।

इसका सबसे बड़ा कारण यह है कि यदि आप चलते-फिरते चर बनाते हैं, तो लगभग हमेशा बाद में आपको उनमें से प्रत्येक के माध्यम से कुछ उपयोगी प्रदर्शन करने के लिए चलना होगा। वहां आपको फिर से प्रत्येक नाम के माध्यम से पुनरावृति के लिए मजबूर किया जाएगा जो आपने मक्खी पर बनाए हैं।

सूची के तत्वों को नाम देना और नामों के माध्यम से पुनरावृति करना बहुत आसान है।

जहां तक ​​अटैचमेंट की बात है, तो आर में इसकी वास्तव में खराब प्रोग्रामिंग प्रैक्टिस है और अगर आप सावधान नहीं हैं तो बहुत परेशानी हो सकती है।


तो, एक संलग्न करें, लेकिन केवल सूची के माध्यम से पुनरावृत्ति होने के बाद?
मोक्स

4

FAQ कहता है:

यदि आपके पास है

varname <- c("a", "b", "d")

तुम कर सकते हो

get(varname[1]) + 2

के लिये

a + 2

या

assign(varname[1], 2 + 2)

के लिये

a <- 2 + 2

तो ऐसा लगता है कि आप GET का उपयोग तब करते हैं जब आप एक ऐसे फॉर्मूला का मूल्यांकन करना चाहते हैं जो एक चर का उपयोग करता है (जैसे कि एक समवर्ती), और ASSIGN जब आप पहले से घोषित चर के लिए एक मूल्य निर्दिष्ट करना चाहते हैं।

असाइन करने के लिए सिंटैक्स: असाइन करें (x, मान)

x: एक चर नाम, एक वर्ण स्ट्रिंग के रूप में दिया गया। कोई जोर-जबरदस्ती नहीं की जाती है, और एक चेतावनी के साथ, एक से अधिक लंबाई के चरित्र वेक्टर के पहले तत्व का उपयोग किया जाएगा।

मूल्य: x को सौंपा जाने वाला मान।


0

एक और मुश्किल समाधान सूची के तत्वों को नाम देना है और attachयह:

list_name = list(
    head(iris),
    head(swiss),
    head(airquality)
    )

names(list_name) <- paste("orca", seq_along(list_name), sep="")
attach(list_name)

orca1
#   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1          5.1         3.5          1.4         0.2  setosa
# 2          4.9         3.0          1.4         0.2  setosa
# 3          4.7         3.2          1.3         0.2  setosa
# 4          4.6         3.1          1.5         0.2  setosa
# 5          5.0         3.6          1.4         0.2  setosa
# 6          5.4         3.9          1.7         0.4  setosa

14
मुश्किल है, लेकिन बुद्धिमान नहीं है। अगर जवाब है attachतो आप आमतौर पर गलत सवाल पूछ रहे हैं ...
बेन बोल्कर

-1

और यह विकल्प?

list_name<-list()
for(i in 1:100){
    paste("orca",i,sep="")->list_name[[i]]
}

यह पूरी तरह से काम करता है। आपके द्वारा लगाए गए उदाहरण में, पहली पंक्ति गायब है, और फिर आपको त्रुटि संदेश देता है।


3
यह ओपी के प्रश्न को संबोधित नहीं करता है। हमारे पास डेटाफ्रेम के साथ एक सूची है, और हम इसे डेटाफ्रेम में असाइन करना चाहते हैं, जिसका नाम orca1, orca2, आदि है
zx8754

"डेटाफ्रेम के साथ सूची" = "डेटाफ्रेम की सूची"?
मोक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.