2017-03-07 55 views
1

我有一个文本字符串变量,例如,如何删除R中的文本字符串中#后的注释

string <- ' a=1, # number a is equal to 1 
      b=2, # number b is equal to 2' 

我不能评估这些方程式,然后删除#后面的注释。 有没有任何功能可以做到这一点?或者我应该使用正则表达式来处理?

+1

(解析(text = string))'我认为问题是逗号而不是'#'s。 – Gregor

+0

我同意你的意见。我的算法是首先删除行返回。然后评论和下面的等式连在一起。这会导致错误。我可能需要优化我的算法解决方案。谢谢你,格雷戈尔。 –

+0

关于逗号,我用它作为分隔符,用** base:strsplit(string,“,”)**分隔这些等式。这是算法之一,我相信一些更聪明的方法必须存在。 –

回答

0

是的,你可以使用正则表达式:

gsub(pattern = "#[^\\\n]*", replacement = "", x = string) 
# [1] " a=1, \n   b=2, " 

说明:"#[^\\\n]*"匹配#之后比新线\n的任何其他。

我很怀疑为什么你这样做。有可能是一个更好的方式来实现自己的目标......

+0

通常,人们只想评估:a = 1和b = 2。 在这种情况下,你可以简单地使用: VAR < - C(A = 1,#数量等于1 B = 2) #评论并不重要位置。 但是,我的最终目标是评估:a = 1,b = a/2。 如果我能以相同的方式, var < - c(a = 1,#号码a等于1 b = a/2) 然后,这会因为未定义而出现错误。 –

+0

然后我想出了: string < - 'a = 1,#number a等于1 b = a/2,#number b等于2' 一旦注释被删除,我可以逐一评估每个方程。首先a = 1,然后b = a/2。未定义a的问题不再存在。 –

+0

是的,但可能你根本不需要使用'eval' ......几乎肯定有更好的方式来获取/存储这些值,而不是字符串。 – Gregor

0

stringr包试试这个:如果你正在使用`EVAL

str <- strsplit(string, split = "\n")[[1]] 
str_trim(str_split_fixed(str, "#|;", 2)[, 1]) 

#[1] "a=1," "b=2," 

或者,如果,例如,str <- "a=1, # number a is equal to 1",然后

str_trim(str_split_fixed(str, "#|;", 2)[, 1]) 

#[1] "a=1,"