मेरा lapply(sapply()) नीचे ठीक काम करता है। लेकिन मैं सोच रहा था कि क्या lapply(sapply()) जैसे दो के बजाय लूपिंग फ़ंक्शन में केवल एक कॉल का उपयोग करने का कोई तरीका है या कोड को छोटा करने का कोई तरीका है?

hsb <- read.csv('https://raw.githubusercontent.com/rnorouzian/e/master/hsb.csv')
ch <- unique(hsb$sch.id)

ols <- lapply(1:2,function(j)sapply(ch,function(i)coef(lm(math~ses,data=hsb,subset=sch.id==i))[j]))
0
rnorouzian 22 अक्टूबर 2020, 09:52

2 जवाब

सबसे बढ़िया उत्तर

दूसरा तरीका purrr लाइब्रेरी का उपयोग करना होगा:

purrr::map_dfr(ch, ~ coef(lm(math ~ ses, data=hsb, subset=sch.id== .)))
2
AlexB 22 अक्टूबर 2020, 10:00

आप एक ही मॉडल को दो बार फ़िट करने के बजाय एक lapply कॉल का उपयोग कर सकते हैं।

result <- do.call(rbind, lapply(ch,function(i)
                        coef(lm(math~ses,data=hsb,subset=sch.id==i))))

यदि आप result को सूची के रूप में उपयोग करना चाहते हैं asplit :

asplit(result, 2)
2
Ronak Shah 22 अक्टूबर 2020, 09:56