में काम नहीं कर रहे हैं, मैं किसी फ़ंक्शन के भीतर डेटाटेबल का उपयोग करने का प्रयास कर रहा हूं, और मैं समझने की कोशिश कर रहा हूं कि मेरा कोड क्यों विफल रहा है।आर डेटाटेबल कॉलम नाम किसी फ़ंक्शन
DT <- data.table(my_name=c("A","B","C","D","E","F"),my_id=c(2,2,3,3,4,4))
> DT
my_name my_id
1: A 2
2: B 2
3: C 3
4: D 3
5: E 4
6: F 4
मैं डीटी के लिए जो होगा "my_id" के विभिन्न मूल्यों के साथ "my_name", के सभी जोड़े बनाने के लिए कोशिश कर रहा हूँ:
Var1 Var2
A C
A D
A E
A F
B C
B D
B E
B F
C E
C F
D E
D F
मेरे पास है मैं एक data.table इस प्रकार है "my_id" के मानों की एक दी गई जोड़ी के लिए "my_name" के सभी जोड़े को वापस करने के लिए एक फ़ंक्शन जो अपेक्षा के अनुसार काम करता है।
get_pairs <- function(id1,id2,tdt) {
return(expand.grid(tdt[my_id==id1,my_name],tdt[my_id==id2,my_name]))
}
> get_pairs(2,3,DT)
Var1 Var2
1 A C
2 B C
3 A D
4 B D
अब, मैं आईडी के सभी जोड़े, जो मैं आईडी के सभी जोड़े को खोजने और फिर get_pairs समारोह के साथ mapply का उपयोग करके करने की कोशिश के लिए इस समारोह निष्पादित करने के लिए चाहते हैं।
> combn(unique(DT$my_id),2)
[,1] [,2] [,3]
[1,] 2 2 3
[2,] 3 4 4
tid1 <- combn(unique(DT$my_id),2)[1,]
tid2 <- combn(unique(DT$my_id),2)[2,]
mapply(get_pairs, tid1, tid2, DT)
Error in expand.grid(tdt[my_id == id1, my_name], tdt[my_id == id2, my_name]) :
object 'my_id' not found
फिर, अगर मैं एक mapply बिना एक ही बात करने की कोशिश, यह काम करता है।
get_pairs3(tid1[1],tid2[1],DT)
Var1 Var2
1 A C
2 B C
3 A D
4 B D
यह फ़ंक्शन केवल मैपली के भीतर उपयोग होने पर विफल क्यों होता है? मुझे लगता है कि डेटाटेबल नामों के दायरे से इसका कुछ संबंध है, लेकिन मुझे यकीन नहीं है।
वैकल्पिक रूप से, क्या इस कार्य को पूरा करने के लिए एक अलग/अधिक प्रभावी तरीका है? मेरे पास एक तीसरा आईडी "नमूना" के साथ एक बड़ा डेटा.table है और मुझे प्रत्येक नमूने के लिए इन सभी जोड़े को प्राप्त करने की आवश्यकता है (उदा। डीटी [नमूना == "sample_id",] पर ऑपरेटिंग)। मैं डेटाटेबल पैकेज में नया हूं, और मैं इसे सबसे कुशल तरीके से उपयोग नहीं कर रहा हूं।
क्षमा करें, मैं क्यों mapply काम नहीं कर रहा है और इसलिए मेरा उत्तर में यह जिक्र नहीं किया था के बारे में यकीन नहीं है। 'Mapply' के लिए – Frank
, यह काम करता है अगर आप सीधे' डीटी 'को फ़ंक्शन में डालते हैं और पैरामीटर के रूप में नहीं (हालांकि यह "यह क्यों काम नहीं कर रहा है" भाग को हल नहीं करता है ...) – Cath
क्या प्रत्येक आईडी आईडी में हमेशा होता है बिल्कुल दो 'नाम'? – Frank