मुझे roxygen2 निर्यात किए गए कार्यों में काम करने के लिए डेटा.table प्राप्त करने में कोई समस्या हो रही है।आर निर्यात किए गए कार्यों में डेटाटेबल ब्रेक
यहाँ foo.R नामक एक फ़ाइल में एक सरल, नकली समारोह (अपने पैकेज के आर निर्देशिका में स्थित है), जो data.table का उपयोग करता है:
#' Data.table test function
#' @export
foo <- function() {
m <- data.table(c1 = c(1,2,3))
print(is.data.table(m))
m[,sum(c1)]
}
अगर मैं कॉपी और आर में इस समारोह पेस्ट, इस समारोह ठीक काम करता है:
> foo <- function() {
+ m <- data.table(c1 = c(1,2,3))
+ print(is.data.table(m))
+ m[,sum(c1)]
+ }
> foo()
[1] TRUE
[1] 6
लेकिन अगर मैं बस निर्यात समारोह लोड, आर सोचता है कि data.table एक data.frame और टूटता है:
> rm(foo)
> load_all()
Loading test_package
> foo
function() {
m <- data.table(c1 = c(1,2,3))
print(is.data.table(m))
m[,sum(c1)]
}
<environment: namespace:test_package>
> foo()
[1] TRUE
Error in `[.data.frame`(x, i, j) : object 'c1' not found
क्या हो रहा है?
अद्यतन
धन्यवाद मदद के लिए @GSee करने के लिए। ऐसा लगता है कि यह वास्तव में एक devtools मुद्दा है। नीचे इंटरैक्टिव कमांड लाइन कोड देखें।
test_package पुस्तकालय, foo
रन सही ढंग से लोड करने के बाद:
> foo
function()
{
m <- data.table(c1 = c(1, 2, 3))
print(is.data.table(m))
m[, sum(c1)]
}
<environment: namespace:test_package>
> foo()
[1] TRUE
[1] 6
load_all()
टूट जाता है चल रहा है foo:
> source('R/foo.R')
> foo
function() {
m <- data.table(c1 = c(1,2,3))
print(is.data.table(m))
m[,sum(c1)]
}
> foo()
[1] TRUE
[1] 6
और करने के लिए भविष्य के कॉल:
> load_all()
Loading test_package
> foo()
[1] TRUE
Error in `[.data.frame`(x, i, j) : object 'c1' not found
किसी तरह source('R/foo.R')
foo कार्यक्षमता जान load_all()
foo
फिर से नहीं टूटते:
> load_all()
Loading test_package
> foo
function() {
m <- data.table(c1 = c(1,2,3))
print(is.data.table(m))
m[,sum(c1)]
}
> foo()
[1] TRUE
[1] 6
इसके अलावा, मैं 1.5 DevTools के लिए अद्यतन और .datatable.aware=TRUE
जोड़ने की कोशिश की, लेकिन वह कुछ भी करने को नहीं मालूम था।
क्या आप सुनिश्चित हैं कि आपके पैकेज में 'foo' बिल्कुल वही है (यानी आपने 'x [' और 'col3'? – BrodieG
के बीच अल्पविराम को छोड़ दिया नहीं है। वे सचमुच कॉपी-एंड- फ़ाइल कमांड लाइन में फ़ाइल foo.R (ऊपर दिखाया गया) से फ़ंक्शन चिपकाया। – kjmij
कमांड लाइन पर 'yourpackagename :: foo' जांचें ताकि यह सुनिश्चित किया जा सके कि वे वास्तव में वही हैं। सिर्फ इसलिए कि आप अपने संपादक पर जो फ़ाइल देखते हैं ऐसा लगता है कि एक्स का मतलब यह नहीं है कि आपके आर सत्र में लोड किए गए पैकेज में फ़ंक्शन वही है। – BrodieG