2016-05-12 9 views
13

मैं आर पैकेज लिखने में सर्वोत्तम प्रथाओं को जानने के लिए बारीकी से @ हैडली के book का पालन करने की कोशिश कर रहा हूं। और मैं पुस्तक के philosophy के बारे में इन पंक्तियों को पढ़ने के लिए रोमांचित था:क्यों roxygen2 स्वचालित रूप से DESCRIPTION फ़ाइल में "आयात" अद्यतन नहीं करता है?

स्वचालित रूप से स्वचालित किया जा सकता है, स्वचालित होना चाहिए। जितना संभव हो उतना कम करें। कार्यों के साथ जितना संभव हो करो।

तो जब मैं निर्भरता के बारे में पढ़ रहे हैं और किया गया था (एक तरह से) NAMESPACE फ़ाइल में आयात निर्देशों और "आयात:" के बीच भ्रमित मतभेद क्षेत्र वर्णन फ़ाइल में, मुझे उम्मीद थी कि roxygen2 स्वचालित रूप से दोनों को संभाल होगा उन्हें। After all

हर पैकेज NAMESPACE में उल्लेख भी आयात में मौजूद हो या क्षेत्रों निर्भर करता है चाहिए।

मुझे उम्मीद थी कि roxygen2 मेरे कार्यों में हर @import ले जाएगा और सुनिश्चित करें कि यह विवरण फ़ाइल में शामिल है। लेकिन यह स्वचालित रूप से ऐसा नहीं करता है।

तो मैं या तो वर्णन फ़ाइल या लगभग मैन्युअल devtools::use_package उपयोग करने के लिए मैन्युअल रूप से जोड़ने के लिए की है।

एक जवाब के लिए चारों ओर देख रहे हैं, मैं इतना है, जहां @hadley टिप्पणी है कि

वर्तमान में, नाम स्थान roclet NAMESPACE को संशोधित करेगा लेकिन नहीं वर्णन

और में इस बात की पुष्टि में इस question पाया अन्य पदों (जैसे here या here) जहां collate_roclet पर चर्चा की गई है, लेकिन "This only matters if your code has side-effects; most commonly because you’re using S4"।

मुझे आश्चर्य है:

  • कारण यह है कि वर्णन स्वचालित रूप से अपडेट नहीं होता और
  • कोई पहले से ही यह करने के लिए एक तरह से गढ़ी हुई है (ऊपर उल्लिखित दर्शन है, जो संभवतः roxygen2 द्वारा साझा किया जाता का खंडन की तरह)

उत्तर

0

namespace_roclet संपादित करता टैग समारोह से पहले स्क्रिप्ट में जोड़ा के आधार पर NAMESPACE फ़ाइल। (SuggestsDepends, Imports, और) निर्भरता के तीन प्रकार, एक ऐसी ही विधि के रूप में namespace_roclet द्वारा इस्तेमाल किया तीन अलग-अलग टैग की आवश्यकता होगी देखते हैं के रूप में (नोटिस Imports एक अलग से एक होना चाहिए, संकुल से अलग करने के NAMESPACE में संलग्न करने के लिए)।

यदि आप अर्द्ध स्वचालित प्रक्रिया लेने के इच्छुक हैं, तो आप अपने द्वारा उपयोग किए गए पैकेजों की पहचान कर सकते हैं और अनुपलब्ध लोगों को पर्याप्त अनुभागों में DESCRIPTION पर जोड़ सकते हैं।

library(reinstallr) 

package.dir <- getwd() 
base_path <- normalizePath(package.dir) 
files  <- list.files(file.path(base_path, "R"), full.names = TRUE) 
packages <- unique(reinstallr:::scan_for_packages(files)$package) 

packages 
0

दो गोलियों आप नीचे के बारे में चिंता के बारे में:

  • अपडेट वर्णन फ़ाइल आगे अतिरिक्त roclets के साथ स्वचालित किया जा सकता है, हालांकि पहले से ही> 4 साल पहले इस तरह के एक पुल अनुरोध खिसका दिया गया: https://github.com/klutometis/roxygen/pull/76
  • मुझे यह मानना ​​है कि लोग वास्तव में roxygen2 को जोड़ने के बजाय, DESCRIPTION फ़ाइल को अपडेट करने के लिए devtools पैकेज का उपयोग करेंगे। उस अर्थ में तो, devtools पहले उपलब्ध पसंद
होगा
संबंधित मुद्दे