2012-02-26 7 views
13

मैं आर में सूची तत्व तक पहुंचने के लिए get() का उपयोग करने का प्रयास कर रहा हूं, लेकिन मुझे एक त्रुटि मिल रही है। प्राप्त ("example.list $ विशेषता") मेंप्राप्त करने के लिए आर में प्रवेश सूची तत्व()

example.list <- list() 
example.list$attribute <- c("test") 
get("example.list") # Works just fine 
get("example.list$attribute") # breaks 

त्रुटि: वस्तु 'example.list $ विशेषता'

कोई युक्ति नहीं मिला? मैं स्ट्रिंग्स के वेक्टर पर लूपिंग कर रहा हूं जो सूची के नामों की पहचान करता है, और यह वास्तव में उपयोगी होगा।

get("attribute", example.list) 
# [1] "test" 

या शायद, अपनी स्थिति के लिए, इस:

+1

आपको त्रुटि मिलने का कारण यह है कि 'example.list $ विशेषता' एक वस्तु नहीं है लेकिन यह ऑपरेटर ('$', उर्फ ​​निकालने, कोशिश - '? '' बैकटिक" लागू करने का परिणाम है '$' "बैकटिक) जोड़ी '(example.list, विशेषता)' – Ryogi

उत्तर

20

यहाँ जादू है कि आप शायद के लिए देख रहे है

get("attribute", eval(as.symbol("example.list"))) 
# [1] "test" 

# Applied to your situation, as I understand it... 

example.list2 <- example.list 
listNames <- c("example.list", "example.list2") 
sapply(listNames, function(X) get("attribute", eval(as.symbol(X)))) 
# example.list example.list2 
#  "test"  "test" 
+0

आपका पहला उदाहरण वह है जो मेरे लिए काम करता है, क्या यह करने का सबसेमात्र तरीका है? मेरे पास सूचियों की एक सूची है कि मैं केवल मेरी सूची [[1]] [1] या मेरी सूची [[1]] $ elementname द्वारा एक्सेस कर सकता हूं। –

2

यदि आपका तार से अधिक सिर्फ नाम, जैसे वस्तु शामिल यहाँ की तरह ऑपरेटरों, आप इस प्रकार भाव के रूप में उन्हें मूल्यांकन कर सकते हैं:

> string <- "example.list$attribute" 
> eval(parse(text = string)) 
[1] "test" 

अपने तार प्रकार "वस्तु $ विशेषता" के सभी कर रहे हैं, तो आप भी उन्हें वस्तु/विशेषता में पार्स सकता है, इसलिए यदि आप अभी भी कर सकते हैं get वस्तु, तो [[ साथ विशेषता निकालें:

> parsed <- unlist(strsplit(string, "\\$")) 
> get(parsed[1])[[parsed[2]]] 
[1] "test" 
3

क्यों बस नहीं:

example.list <- list(attribute="test") 
listName <- "example.list" 
get(listName)$attribute 

# or, if both the list name and the element name are given as arguments: 
elementName <- "attribute" 
get(listName)[[elementName]] 
-2

flodel का जवाब अपने आवेदन के लिए काम किया है, तो मैं पद डब्ल्यू हूँ टोपी मैंने इसे बनाया, भले ही यह बहुत ही असीमित है। तुम इतनी तरह एक for पाश के साथ एक सूची तत्व का उपयोग कर सकते,:

#============== List with five elements of non-uniform length ================# 
example.list= 
list(letters[1:5], letters[6:10], letters[11:15], letters[16:20], letters[21:26]) 
#===============================================================================# 
#====== for loop that names and concatenates each consecutive element ========# 
derp=c();   for(i in 1:length(example.list)) 
{derp=append(derp,eval(parse(text=example.list[i])))} 
derp #Not a particularly useful application here, but it proves the point. 

मैं इस तरह कोड का उपयोग कर रहा एक समारोह है कि स्तंभ नाम से एक डेटा फ्रेम से कॉलम की निश्चित सेट कॉल के लिए। उपयोगकर्ता तत्वों के साथ एक सूची में प्रवेश करता है जो प्रत्येक कॉलम नामों के विभिन्न सेटों का प्रतिनिधित्व करता है (प्रत्येक सेट एक माप से संबंधित वस्तुओं का समूह है), और उन सभी कॉलम वाले बड़े डेटा फ्रेम। for लूप प्रत्येक आंतरिक सूची तत्व पर लागू होता है क्योंकि आंतरिक फ़ंक्शन * के लिए स्तंभ नामों के सेट के रूप में केवल बड़े डेटा फ्रेम के कॉलम के वर्तमान नाम पर लागू होता है। इसके बाद यह उस डेटा लूप के नंबर के अनुरूप सूची के तत्व में नामों के अनुरूप बड़े डेटा फ्रेम के सबसेट के आउटपुट के साथ एक मैट्रिक्स के एक कॉलम प्रति लूप को पॉप्युलेट करता है। for लूप के बाद, फ़ंक्शन द्वारा निर्मित उस मैट्रिक्स को आउटपुट करके समाप्त होता है।

सुनिश्चित नहीं है कि आप अपनी सूची तत्वों के साथ कुछ ऐसा करने की सोच रहे हैं, लेकिन मुझे खुशी है कि मैंने इस चाल को उठाया। विचारों के लिए सभी को धन्यवाद!

"दूसरा उदाहरण"/स्पर्शरेखा वर्गीकृत प्रतिक्रिया मॉडल कारक में आवेदन के संबंध में जानकारी स्कोरिंग:

यहाँ समारोह मैं ऊपर वर्णित है, बस के मामले में किसी को भी बड़े में वर्गीकृत प्रतिक्रिया मॉडल कारक स्कोर * गणना करने के लिए चाहता है बैच ... आउटपुट मैट्रिक्स का प्रत्येक कॉलम सूची के एक तत्व से मेल खाता है (यानी, सूची तत्व में कॉलम नाम द्वारा निर्दिष्ट क्रमिक सूचक आइटम के साथ एक गुप्त विशेषता), और पंक्तियां डेटा फ्रेम की पंक्तियों से मेल खाती हैं इनपुट। प्रत्येक पंक्ति में संभावित रूप से पारस्परिक रूप से निर्भर अवलोकन होते हैं, जैसा किसी दिए गए व्यक्ति से होता है, जिसके लिए आउटपुट मैट्रिक्स की एक ही पंक्ति में कारक स्कोर होते हैं।साथ ही, मुझे लगता है कि मुझे यह जोड़ना चाहिए कि यदि किसी दिए गए सूची तत्व में सभी आइटम सटीक समान Likert स्केल रेटिंग विकल्पों का उपयोग करते हैं, तो वर्गीकृत प्रतिक्रिया मॉडल रेटिंग स्केल मॉडल (सीएफ http://www.rasch.org/rmt/rmt143k.htm) से कारक स्कोरिंग के लिए कम उपयुक्त हो सकता है।

'grmscores'=function(ColumnNameList,DataFrame) {require(ltm) #(Rizopoulos,2006) 
x = matrix (NA , nrow = nrow (DataFrame), ncol = length (ColumnNameList)) 
for(i in 1:length(ColumnNameList)) #flodel's magic featured below!# 
{x[,i]=factor.scores(grm(DataFrame[, eval(parse(text= ColumnNameList[i]))]), 
resp.patterns=DataFrame[,eval(parse(text= ColumnNameList[i]))])$score.dat$z1}; x} 

संदर्भ

* Rizopoulos, डी (2006)। एलटीएम: लेटेबल वेरिएबल मॉडलिंग और आइटम प्रतिक्रिया सिद्धांत विश्लेषण के लिए एक आर पैकेज, सांख्यिकीय सॉफ्टवेयर जर्नल, 17 (5), 1-25। यूआरएल: http://www.jstatsoft.org/v17/i05/

+1

टिप्पणियों के बिना डाउनवॉट्स? – flies

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