R خطأ الوعد بالفعل قيد التقييم عند استخدام مجموعة فرعية في الوظيفة ولكن لا يوجد خطأ في البرنامج النصي

StackOverflow https://stackoverflow.com/questions/3073746

  •  28-09-2019
  •  | 
  •  

سؤال

أحصل على خطأ غريب عندما أقوم بتشغيل الوظيفة التالية:

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). لسوء الحظ ، في هذه الحالة ، يؤدي تعيين الافتراضي للنوع إلى حد ما إلى حدوث عودة في التقييم. حاول تغيير اسم المعلمة أو الكائن الخارجي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top