2014-02-07 68 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