0

在我的 R 脚本中...

我有一个myObject看起来像这样的对象:

> myObject
          m    convInfo        data        call dataClasses     control 
      FALSE       FALSE       FALSE       FALSE       FALSE       FALSE 

这是从合适的地方返回的东西is.na(obj)objnls

我正在尝试测试第一项是否为 FALSE 而不是 TRUE。我怎样才能把它提取出来?我试过myObject$m了,但没有用。

4

2 回答 2

1

您有一个命名(逻辑)向量。

> v <- 1:5
> names(v) <- LETTERS[1:5]
> is.na(v)
    A     B     C     D     E 
FALSE FALSE FALSE FALSE FALSE 
> myObj <- .Last.value

您可以像处理任何其他原子向量一样处理它:

> myObj[1]
    A 
FALSE 
> myObj[1] == FALSE
   A 
TRUE 
于 2012-07-05T19:57:19.940 回答
0

返回的对象nls()是一个列表。on a list的行为is.na()在 what is an is not 的意义上有些特殊NA。来自?is.na

Value:

     The default method for ‘is.na’ applied to an atomic vector returns
     a logical vector of the same length as its argument ‘x’,
     containing ‘TRUE’ for those elements marked ‘NA’ or, for numeric
     or complex vectors, ‘NaN’ (!) and ‘FALSE’ otherwise.  ‘dim’,
     ‘dimnames’ and ‘names’ attributes are preserved.

     The default method also works for lists and pairlists: the result
     for an element is false unless that element is a length-one atomic
     vector and the single element of that vector is regarded as ‘NA’
     or ‘NaN’.

根据上面引用的文本确定的t逻辑向量也是如此TRUE。因此所有FALSEt

t[1]
t["m"]
head(t, 1)

提取 的第一个元素t。如果您想测试,FALSE那么我可以尝试:

!isTRUE(t[1])

例如

> set.seed(1)
> logi <- sample(c(TRUE,FALSE), 5, replace = TRUE)
> logi
[1]  TRUE  TRUE FALSE FALSE  TRUE
> !isTRUE(logi[1])
[1] FALSE

$版本不起作用的原因$是记录适用于非原子向量。logi(或你的t)是一个原子向量,因为它包含相同类型的元素。

> is.atomic(logi)
[1] TRUE
> names(logi) <- letters[1:5]
> logi$a
Error in logi$a : $ operator is invalid for atomic vectors
> logi["a"]
   a 
TRUE
于 2012-07-05T19:19:24.007 回答