【问题标题】:Converting a character type to a logical将字符类型转换为逻辑类型
【发布时间】:2012-07-23 14:24:14
【问题描述】:

我正在尝试创建一些对不熟悉 R 的人来说非常用户友好的代码。该代码的设计目的是使逻辑标准可以根据用户正在寻找的内容轻松操作。因此,我不想强​​迫用户在 if 语句中工作,我只想在代码顶部创建一个包含逻辑语句的字符变量(即x <- "a > 2")。

然后我想使用包含逻辑运算符的字符变量来评估 if 语句。基本思路如下:

a <- 3
x <- "a > 2"
if(x)TRUE

这显然会返回参数不可解释为逻辑的错误,因为它将 x 视为字符串“a > 2”。

我知道我可以这样做:

a <- 3
x <- as.logical(a > 2)
if(x)TRUE

但是,就我正在处理的事情而言,最好将这些逻辑语句最初存储为字符。而且 as.logical() 似乎不能转换字符(即as.logical("a &gt; 2"))不起作用。

我的问题:是否有一些函数可以让 x 让 R 不将其视为一个字符,而是将其视为一个逻辑语句?换句话说,我怎样才能去掉引号,以便逻辑语句可以在 if 语句中工作?

【问题讨论】:

  • “我正在尝试创建一些对不熟悉 R 的人来说非常用户友好的代码。” ——有些人可能会说这是不可能的
  • 您希望将用户与 R 隔离多远?如果您的用户对“'&' 表示 AND”之类的东西不满意,那么输入是字符串还是语句都无关紧要。您是否试图让用户更容易地编辑函数或为函数提供输入?基本上,我认为任何能够理解如何构建诸如if y&gt;2*z .OR. (y&lt; x .AND. y &lt; z/3) 之类的逻辑测试的人都可以轻松地学习用 R 语法来构建。
  • 我的目标并不是摆脱 R 语法。在整个代码中,我有许多 if 语句,它们在开始时依赖于一些简单的标准输入。我只是想让用户快速轻松地根据自己的判断更改初始标准输入,而无需搜索代码。在开始时将所有内容都保留为字符输入允许我将逻辑语句的各个方面分开。用户首先选择要查看的参数、将哪个逻辑运算符应用于每个参数(==、>、<...>

标签: r


【解决方案1】:

您可以使用eval(parse(...))

a <- 3
x <- "a > 2"

eval(parse(text=x))
[1] TRUE

x2 <- "a==3"
eval(parse(text=x))
[1] TRUE

这里有龙

参见,例如:

【讨论】:

  • 谢谢。这行得通,但我不确定我知道你指的是什么龙。
  • 我添加了一些相关问题的链接。如果可以的话,我个人会避免eval(parse(...))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
相关资源
最近更新 更多