布尔结果显示为FALSE,应返回TRUE

时间:2018-07-16 08:54:12

标签: r boolean

如果存在[list1$b],则布尔值为何为FALSE?请参见下面的代码中的步骤4。由于值为FALSE,因此不会执行if语句。

其他观察结果:我还注意到,在第二次运行总脚本时,该脚本指出list1中缺少'a。即使存在[list1 $ a],也要添加一个'。

期望的行为/结果::如果存在[list1$b],则将布尔值设置为TRUE,然后运行if statement。另外,在总脚本的第二轮中,[list1 $ a]应该检测到[list1 $ a]存在。

##########
# Step-1 #
##########
# Create list [list1] if missing.
if (!exists('list1')) {
  list1 <- list()
}

##########
# Step-2 #
##########
# Add variable [b] in list [list1].
list1$b <- 1

##########
# Step-3 #
##########
# Create variable [a] in list [list1] if missing.
if (!'a' %in% list1)  {
  print ('a is missing in list1. Adding a')
  list1$a <- 2
}

##########
# Step-4 #
##########
# Execute only print, if variable [b] in list [list1] exists. 
# Note! Even though variable [b] in list [list1] exists, the boolean result is FALSE.
if ('b' %in% list1)  {
  print ('b exists in list1. Do nothing')
}

# Print-out boolean result of Step-4:
boolean.result.of.step.four <- ('b' %in% list1)
print (paste0('Boolean result of step-4: ', boolean.result.of.step.four))

1 个答案:

答案 0 :(得分:2)

'b'list1中对象的名称。 %in%与值向量匹配值。

如果要创建list1作为包含值'b'的列表,则条件将是TRUE。参见:

list1 <- list('b')
> 'b' %in% test1
[1] TRUE

根据您的情况,可以将'b'与向量names(list1)进行匹配。因此,请在您的'b' %in% names(list1)条件中使用if,使其生效。