मैं my problem को दोबारा पोस्ट कर रहा हूं, जब मैंने देखा कि knitr के लेखक द्वारा अधिक सहायता प्राप्त करने के लिए सलाह दी गई थी।knitr बनाम इंटरएक्टिव आर व्यवहार
मैं एक .Rmd फ़ाइल है कि मैं एक इंटरैक्टिव आर सत्र में लाइन द्वारा लाइन आगे बढ़ सकते हैं के साथ एक सा पहेली, और भी R CMD BATCH
साथ हूँ, लेकिन यह काम नहीं करता जब knit("test.Rmd")
का उपयोग कर। मुझे यकीन नहीं है कि समस्या कहां झूठ बोल रही है, और मैंने समस्या को कम करने की कोशिश की जितनी मैं कर सकता था।
```{r Rinit, include = FALSE, cache = FALSE}
opts_knit$set(stop_on_error = 2L)
library(adehabitatLT)
```
The functions to be used later:
```{r functions}
ld <- function(ltraj) {
if (!inherits(ltraj, "ltraj"))
stop("ltraj should be of class ltraj")
inf <- infolocs(ltraj)
df <- data.frame(
x = unlist(lapply(ltraj, function(x) x$x)),
y = unlist(lapply(ltraj, function(x) x$y)),
date = unlist(lapply(ltraj, function(x) x$date)),
dx = unlist(lapply(ltraj, function(x) x$dx)),
dy = unlist(lapply(ltraj, function(x) x$dy)),
dist = unlist(lapply(ltraj, function(x) x$dist)),
dt = unlist(lapply(ltraj, function(x) x$dt)),
R2n = unlist(lapply(ltraj, function(x) x$R2n)),
abs.angle = unlist(lapply(ltraj, function(x) x$abs.angle)),
rel.angle = unlist(lapply(ltraj, function(x) x$rel.angle)),
id = rep(id(ltraj), sapply(ltraj, nrow)),
burst = rep(burst(ltraj), sapply(ltraj, nrow)))
class(df$date) <- c("POSIXct", "POSIXt")
attr(df$date, "tzone") <- attr(ltraj[[1]]$date, "tzone")
if (!is.null(inf)) {
nc <- ncol(inf[[1]])
infdf <- as.data.frame(matrix(nrow = nrow(df), ncol = nc))
names(infdf) <- names(inf[[1]])
for (i in 1:nc) infdf[[i]] <- unlist(lapply(inf, function(x) x[[i]]))
df <- cbind(df, infdf)
}
return(df)
}
ltraj2sldf <- function(ltr, proj4string = CRS(as.character(NA))) {
if (!inherits(ltr, "ltraj"))
stop("ltr should be of class ltraj")
df <- ld(ltr)
df <- subset(df, !is.na(dist))
coords <- data.frame(df[, c("x", "y", "dx", "dy")], id = as.numeric(row.names(df)))
res <- apply(coords, 1, function(dfi) Lines(Line(matrix(c(dfi["x"],
dfi["y"], dfi["x"] + dfi["dx"], dfi["y"] + dfi["dy"]),
ncol = 2, byrow = TRUE)), ID = format(dfi["id"], scientific = FALSE)))
res <- SpatialLinesDataFrame(SpatialLines(res, proj4string = proj4string),
data = df)
return(res)
}
```
I load the object and apply the `ltraj2sldf` function:
```{r fail}
load("tr.RData")
juvStp <- ltraj2sldf(trajjuv, proj4string = CRS("+init=epsg:32617"))
dim(juvStp)
```
knitr("test.Rmd")
का उपयोग के साथ विफल रहता है:: यहाँ उदाहरण (test.Rmd
में) है सीधे कॉल का उपयोग करते हुए आर कंसोल में के बाद त्रुटि काम करता है की उम्मीद के रूप में हुई
label: fail
Quitting from lines 66-75 (test.Rmd)
Error in SpatialLinesDataFrame(SpatialLines(res, proj4string =
proj4string), (from <text>#32) :
row.names of data and Lines IDs do not match
...
समस्या format
से संबंधित है आईडी (apply
ltraj2sldf
की कॉल में) आईडी 100,000 से पहले: एक इंटरैक्टिव कॉल का उपयोग करके, आर "99 994", "99 995", "99 996", "99 997", "99 998" "," 99 99 9 "," 100000 "; बुनाई आर का उपयोग करके "99 99 4", "99 995", "99 996", "99 997", "99 998", "99 999", "100000" अतिरिक्त अतिरिक्त रिक्त स्थान के साथ।
क्या इस व्यवहार के लिए कोई कारण है? knitr
आर में प्रत्यक्ष कॉल से अलग व्यवहार क्यों करना चाहिए? मुझे यह मानना है कि मुझे उस समय के साथ कठिन समय है, क्योंकि मैं इसे डीबग नहीं कर सकता (यह एक इंटरैक्टिव सत्र में काम करता है)!
किसी भी संकेत की बहुत सराहना की जाएगी। अगर यह मदद करता है तो मैं RData प्रदान कर सकता हूं (फ़ाइल 4.5 एमओ है), लेकिन मुझे अधिकतर दिलचस्पी है कि ऐसा अंतर क्यों होता है। मैंने बिना किसी सफलता के एक आत्म-पुनरुत्पादित उदाहरण के साथ आने की कोशिश की, इसके बारे में खेद है। किसी भी योगदान के लिए अग्रिम धन्यवाद!
बैपटिस्ट की टिप्पणी के बाद, यहां आईडी पीढ़ी के बारे में कुछ और विवरण दिए गए हैं। असल में, आईडी apply
कॉल द्वारा डेटा फ्रेम की प्रत्येक पंक्ति पर उत्पन्न होता है, जो बदले में format
का उपयोग करता है: format(dfi["id"], scientific = FALSE)
। यहां, कॉलम id
पंक्तियों की संख्या से 1 श्रृंखला (1:nrow(df)
) है। scientific = FALSE
यह सुनिश्चित करने के लिए है कि मेरे पास 100000 के लिए 1e + 05 जैसे परिणाम नहीं हैं।
आईडी पीढ़ी की खोज के आधार पर, समस्या केवल पहले संदेश में प्रस्तुत की गई समस्याओं के लिए हुई, यानी 99 995 से 99 999, जिसके लिए एक प्रमुख स्थान जोड़ा जाता है। यह format
कॉल के साथ नहीं होना चाहिए, क्योंकि मैंने आउटपुट में विशिष्ट संख्या में अंक नहीं मांगा था। उदाहरण के लिए:
> format(99994:99999, scientific = FALSE)
[1] "99994" "99995" "99996" "99997" "99998" "99999"
हालांकि, आईडी मात्रा में उत्पन्न कर रहे हैं, तो यह हो सकता है:
> format(99994:100000, scientific = FALSE)
[1] " 99994" " 99995" " 99996" " 99997" " 99998" " 99999" "100000"
नोट एक समय में एक ही एक संसाधित की उम्मीद परिणाम देता है कि:
> for (i in 99994:100000) print(format(i, scientific = FALSE))
[1] "99994"
[1] "99995"
[1] "99996"
[1] "99997"
[1] "99998"
[1] "99999"
[1] "100000"
अंत में, यह ठीक है जैसे आईडी एक समय में तैयार नहीं की गई थी (जैसा कि मैं apply
लाइन से कॉल करता हूं), लेकिन इस मामले में, 6 एक समय में, और केवल 1e + 05 के करीब ... एन डी निश्चित रूप से, केवल knitr का उपयोग करते समय, इंटरैक्टिव या बैच आर नहीं।
> sessionInfo()
R version 3.0.1 (2013-05-16)
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=fr_FR.UTF-8 LC_NUMERIC=C
[3] LC_TIME=fr_FR.UTF-8 LC_COLLATE=fr_FR.UTF-8
[5] LC_MONETARY=fr_FR.UTF-8 LC_MESSAGES=fr_FR.UTF-8
[7] LC_PAPER=C LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=fr_FR.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] knitr_1.2 adehabitatLT_0.3.12 CircStats_0.2-4
[4] boot_1.3-9 MASS_7.3-27 adehabitatMA_0.3.6
[7] ade4_1.5-2 sp_1.0-11 basr_0.5.3
loaded via a namespace (and not attached):
[1] digest_0.6.3 evaluate_0.4.4 formatR_0.8 fortunes_1.5-0
[5] grid_3.0.1 lattice_0.20-15 stringr_0.6.2 tools_3.0.1
लंबे समय से गोली मार दी: 'knitr', कुछ स्वरूपण विकल्प (सार्थक अंकों की जैसे संख्या) बदल सकता है किसी भी तरह प्रभावित कर रहा है कि कैसे आईडी नहीं बनाया गया है। – baptiste
यह हो सकता है। लेकिन मुझे अभी भी नहीं दिख रहा है कि इस आउटपुट को कौन से विकल्प प्रभावित कर सकते हैं।मुझे अपने पहले संदेश में आईडी की पीढ़ी के बारे में अधिक जानकारी दें ... देखें कि क्या यह अधिक समझ में आता है! धन्यवाद। –
क्या आप इस प्रारूप की समस्या के साथ एक न्यूनतम उदाहरण बना सकते हैं? मैं आवेदन और सफेद अंतरिक्ष पैडिंग के बारे में थोड़ा समझ में नहीं आता। क्या आपकी सूची में 10000 है, या नहीं? – baptiste