2014-02-07 19 views
0

我剛遇到一些令人困惑的東西(至少對我來說),並希望更聰明的成員可以擺脫一些光。創建文件名w sprintf在RStudio控制檯寬度太短時被截斷

我在Windows XP上使用RStudio 0.98.490來將繪圖保存爲PNG。文件名是使用strwrap(sprintf())創建的。我習慣性地使用更長的(即更豐富的)文件名,我猜這次我可能過於熱情了,這就是爲什麼這個問題浮出水面。

我注意到,當RStudio控制檯的寬度是短於運行時文件名的長度的,後者被截斷,創建的文件沒有.png擴展名。我試驗並將RStudio控制檯的寬度拖到比文件名更長 - 問題消失。

我的問題:爲什麼會發生這種情況?更重要的是,我可以在不更改文件名的情況下解決這個截斷問題嗎?我是R的新手,我不明白爲什麼兩個看起來不相關的項目應該互動。如下圖所示

截斷:

> writeLines(paste0(FName, " generated")) # Write to Console 
aaaaaa aaaaaaaaaaaaaabcdef ghijk lmnopqrstuvaaaaaa aaaaaaaaaaaaa213424534aaaaaa generated 
aaaaaaaaaaaaa.png generated 
> 

示例代碼下面附:

astring <- "aaaaaa aaaaaaaaaaaaa" 
FName <- strwrap(sprintf("%sabcdef ghijk lmnopqrstuv%s213424534%s.png", 
           astring, astring, astring)) # simulate long filename 
png(filename = FName) 

a <- rnorm(100) 
b <- rnorm(100)*2 
plot(b,a) 

dev.off() 
writeLines(paste0(FName, " generated")) # Write to Console 

我發現的最接近的資源是https://stackoverflow.com/questions/6104448/preserving-long-comments-in-console-output-not-falling-victim-to-truncat但撰文人面臨的問題似乎略有不同。

如果有人能夠啓發,我將非常感激。謝謝!

編輯:感謝@jlhoward,我擡頭看strwrap(),發現寬度參數。通過分配'255'(或任何大整數),問題就解決了。

回答

0

爲什麼使用strwrap(...)

正如文檔解釋,strwrap(...)將您的輸入解析爲單詞,然後根據寬度參數進行換行(插入"\n")。該參數的默認值是getOption("width"),它基於控制檯寬度。試着輸入

getOption("width") 

則縮小或擴大您的控制檯窗口,然後再去做。

如果您只是使用sprintf(...)來生成文件名,則不存在此問題。

+0

您好@jlhoward,我使用'strwrap()',因爲我也習慣性地在我的_code本身中打破'sprintf'文本,以獲得更好的可讀性。假設我使用窄屏幕,我會將代碼分成兩行:'FName < - strwrap(sprintf(「%sabcdef ghijk'和'lmnopqrstuv%s213424534%s.png」,'。文件名會產生不必要的回車。有沒有更好的方法來解決這個問題,而不是'strwrap()'? – NoviceProg

+0

好吧,'strwrap(...)'也插入了一個不需要的回車符,所以這不是一個解決方案,我想你可以使用'paste0(。 ..)',例如:'sprintf(paste0(「%sabcdef ghijk」,'和lmnopqrstuv%s213424534%s.png「),但真正的解決方案是避免這樣長的文件名。 – jlhoward

+0

Point taken,@ jlhoward。謝謝! – NoviceProg