将长度为一的字符转换为一个字节的字符串

时间:2011-08-24 05:12:53

标签: string r escaping byte

好的,我承认标题有点误导。我目前是脑力激荡,所以我可能会遗漏一些明显的东西。

我正在使用R-powered webapp,我想将某些参数传递给read.table函数 - sep等。如果我将单字节字符作为sep参数传递:,;| ...但是如果我尝试传递{{} { 1}},我收到一个错误:

\t

当然,这是因为invalid 'sep' value: must be one byte 实际上已被转义(\t)。我是否有可能逃脱逃逸,并按“原样”传递它 - 即单字节字符串?

1 个答案:

答案 0 :(得分:3)

您需要将sep="\t"作为参数写入read.table

如果是标签页,则t会被转义。换句话说,您告诉R t并不真正意味着t,而是tab。如果您使用\转义\\,那么您告诉R \并不真正意味着escape,而是文字\

以下是一些代码,用于说明sep="\t"read.table的正确用法。只是为了它的乐趣,我使用textConnection来使用连接来写入和读取,而不是使用磁盘上的文件:

# Create a tab delimited file
zz <- textConnection("foo", "w")
write.table(matrix(1:12, ncol=3), file=zz, sep="\t")
close(zz)
foo

# The simple way:
tabsep <- "\t"

# The hard way, or if data was passed from a web app and you need to clean it
tabsep <- gsub("\\\\t", "\t", "\\t")


# Read a tab delimited file
zz <- textConnection(foo)
read.table(zz, sep=tabsep)
close(zz)

这会产生以下输出:

  V1 V2 V3
1  1  5  9
2  2  6 10
3  3  7 11
4  4  8 12