R خطأ الوعد بالفعل قيد التقييم عند استخدام مجموعة فرعية في الوظيفة ولكن لا يوجد خطأ في البرنامج النصي
سؤال
أحصل على خطأ غريب عندما أقوم بتشغيل الوظيفة التالية:
TypeIDs=c(18283,18284,17119,17121,17123,17125,17127,17129,17131,17133,18367,18369,18371,18373,18375,18377,18379)
featsave<-function(featfile,TypeIDs=TypeIDs) {
mydata1<-read.table(featfile,header=TRUE)
mydata2<-subset(mydata1,TypeID %in% TypeIDs)
mydata<-as.data.frame(cast(mydata2, Feat1 + Feat2 + ID ~ TypeID,value="value"))
save(mydata,file="mydatafile.Rdata",compress=TRUE)
return(mydata)
}
مع البيانات التالية:
Feat1 Feat2 ID Feat3 Feat4 TypeID value
1 1 1 6 266 18283 280.00
1 1 1 6 266 18284 20.00
1 1 1 6 266 18285 0.00
1 1 1 6 266 17116 0.00
1 1 1 6 266 17117 0.00
1 1 1 6 266 17118 0.00
1 1 1 6 266 17119 68.75
1 1 1 6 266 17120 0.00
1 1 1 6 266 17121 1.26
الخطأ الذي أحصل عليه هو:
Error in inherits(x, "factor") :
promise already under evaluation: recursive default argument reference or earlier problems?
يحدث هذا الخطأ على mydata2
الخط حيث أتناول مجموعة فرعية من البيانات. لا يمكنني أن أبدو تصحيحها لأنني إذا قمت بدلاً من ذلك بتشغيل كل سطر من الوظيفة في المترجم الفوري ، لم أعد أحصل على الخطأ. ما يعطي؟
المحلول
إنه استخدامك العودية لـ TypeIDs
. الشيء الذي يجب تذكره هو أن وسيطات الوظائف يتم تقييمها بشكل بتكس function(foo, bar = foo)
. لسوء الحظ ، في هذه الحالة ، يؤدي تعيين الافتراضي للنوع إلى حد ما إلى حدوث عودة في التقييم. حاول تغيير اسم المعلمة أو الكائن الخارجي.
لا تنتمي إلى StackOverflow