如果在R错误消息中有Else语句

时间:2014-09-23 13:11:23

标签: r if-statement

这是我第一次在R中使用if-else语句。我有一个名为'Performance'的列(在数据框中)有百分比(其中一些是估计值)。我创建了一个名为“Estimate”的新列,它使用“Performance”列的最后一个字符。现在,我想创建一个具有以下条件的列:如果'Estimate'='*'则'Estimate'='YES',否则'Estimate'='NO'。我只想保留新列名“Estimate”。我写的声明有效,但我收到的错误信息是:

  

“警告信息:在if(data.set $ Estimate ==”*“){:条件长度> 1且仅使用第一个元素”

以下是我的发言:

data.set$Estimate <- if (data.set$Estimate == '*') {data.set$Estimate = 'YES'} else{data.set$Estimate = 'NO'}

有人可以解释为什么我收到此错误消息,和/或我需要更改以获取此消息吗?非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

在您的专栏估算中,有多个条目包含&#34; *&#34;。但if语句只使用一个逻辑元素:

any(data.set$Estimate=="*")

并且看到你想用'&#34; YES&#34;取代*你可以用

my.fun1<-function(x)
         {
            ifelse(x=="*","YES","NO")
         }
data.set$Estimate<-sapply(data.set$Estimate,my.fun1)

答案 1 :(得分:0)

对于警告,它实际上并不起作用。单个if语句期望单个布尔值,但是您尝试将数据$ Estimate(向量)与&#34; *&#34;进行比较。 (单个元素)。因此它完全按照它在警告中所说的那样,仅采用数据$ Estimate的第一个元素。你的思维过程很好,只是没有完全实现!

ifelse()允许矢量化(即布尔值的矢量),所以它做了你认为if-else应该做的事情。在这种情况下不需要sapply,我们可以进行矢量化。

使用您的数据$ Estimate

替换下面的vect
vect<-c("*", "X", "*", "*", "10YEAH", "WHAT", "BlurbBlurb")
vect<-ifelse(vect=="*","Yes", "No" )
vect

#[1] "Yes" "No"  "Yes" "Yes" "No"  "No"  "No"