strsplit符号“|”导致R中的非字符错误消息

时间:2011-04-08 14:33:48

标签: r strsplit

非常感谢你的帮助。

是。我应该提供一个更好的例子。

这是我的输入文件(3columns.csv)

    Patients    Markers Studies
1   AA         EXX         1111
2   BB         ABCB1           2222|3333|5555|6666
3   CC         CCAN        4444|5555
4   DD         ABCB1           6666

这是我的输出文件

    Patients    Markers Studies
1   AA         EXX         1111
2   BB         ABCB1           2222
2   BB         ABCB1           3333
2   BB         ABCB1           5555
2   BB         ABCB1           6666
3   CC         CCAN        4444
3   CC         CCAN        5555
4   DD         ABCB1           6666

(1)根据以下命令,我对第6行进行了一些更改,如下所示

sapply(unlist(strsplit(as.character(df[x,3]),"\\|")),c,df[x,1:2],USE.NAMES=FALSE) 

(2)我试图将df文件调用为

df <- read.csv(file="3columns.csv",header=TRUE,stringsAsFactors=FALSE)

(3)我还尝试在\\

之前添加|

所有这些方法都不起作用,所以我怀疑我可能误解了下面的答复。你能介意给我一些指导吗?

最好的问候, 凯瑟琳

------原始问题--------------------------

我想使用R的strsplit命令根据符号"|"分隔单元格。

但是,会显示错误消息:

Error in strsplit(df[x, 3], "|") : non-character argument.

此错误消息的含义是什么?

如何更正此错误?

我使用的是本网站上一个问题中列出的命令行:

> write.csv(df, file="3columns.csv")
> as.data.frame(   
+ t(     
+ do.call(cbind,       
+ lapply(1:nrow(df),function(x){         
+ sapply(unlist(strsplit(df[x,3],"|")),c,df[x,1:2],USE.NAMES=FALSE)       
+ })     
+ )   
+ ) 
+ )

2 个答案:

答案 0 :(得分:6)

如果没有最小的可重复性示例,很难看出实际出现了什么问题。但是strsplit(df[x, 3], "|")不起作用,因为|符号是字符中的特殊情况(正则表达式为或)。你实际上需要双重逃避:

strsplit("ab|cd",split="\\|")

答案 1 :(得分:2)

|是正则表达式中使用的特殊字符。您需要使用|转义\\才能获得您想要的效果:

x <- "abc|xyz|123|456|foo|bar|baz|bat|wheee"

strsplit(x, "\\|")

[[1]]
[1] "abc"   "xyz"   "123"   "456"   "foo"   "bar"   "baz"   "bat"   "wheee"

请参阅?regex并搜索“特殊字符”以查找整个字符列表。