好的,我承认标题有点误导。我目前是脑力激荡,所以我可能会遗漏一些明显的东西。
我正在使用R-powered webapp,我想将某些参数传递给read.table
函数 - sep
等。如果我将单字节字符作为sep
参数传递:,
,;
,|
...但是如果我尝试传递{{} { 1}},我收到一个错误:
\t
当然,这是因为invalid 'sep' value: must be one byte
实际上已被转义(\t
)。我是否有可能逃脱逃逸,并按“原样”传递它 - 即单字节字符串?
答案 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