【问题标题】:Removing [1] with sink and sprintf output in R在 R 中使用 sink 和 sprintf 输出删除 [1]
【发布时间】:2013-07-22 22:11:15
【问题描述】:

我正在尝试使用 sprintf 和 sink 编写一系列字符和数值:

 sink("sample.txt", append=TRUE, split=TRUE)
 sprintf("Hello World")

当然,上面是一个例子,所以我没有上面数据框中的数值,但我需要使用sprintf。

文本文件 (sample.txt) 中的输出如下所示:

 [1] Hello World

如何从行中删除 [1]?有没有办法让 [1] 不会写入文件?

【问题讨论】:

    标签: r printf sink


    【解决方案1】:

    想到两个选项,使用cat()writeLines()

    > cat(sprintf("Hello World"), "\n")
    Hello World 
    > writeLines(sprintf("Hello World"))
    Hello World
    

    您遇到的问题是 sprintf() 返回一个字符向量,并且像任何其他字符向量一样,如果您 print 它,R 会像向量一样打印它。您想要的是包含在字符向量的第一个元素中的字符串(在这种情况下是唯一的)。因此我们使用工具来写出字符串而不是打印字符向量。

    请注意,这两种方法都可以通过file 参数(在cat() 中)或con 参数(在writeLines() 中)直接写入文件,您可能会觉得这很有用。

    【讨论】:

    • 感谢您的解释!我使用了 cat(),效果很好。
    • 这可以在默认设置中更改吗(效果总是使用cat,但实际上不使用它)?
    • @RScriv 我会写一个包装器到sprintf()(比如wrapSprintf()),返回带有c("foo","character")类的字符向量,然后写一个print.foo()方法调用cat()或@ 987654336@。有了这两个,你就可以做wrapSprintf("whatever"),剩下的就交给 S3 调度和自动打印了。这稍微滥用了print 系统,但更符合让工具做一件事 - 返回字符 - 和另一个工具以特定方式显示该字符向量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多