2012-07-05 171 views
0

在我的[R脚本...提取数据

我有一个对象myObject这是一件好事,看起来像这样:

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

它是什么,从返回is.na(obj)其中objnls拟合。

我想测试,如果第一项是假的而不是真。我如何提取出来?我试过myObject$m,但没有奏效。

+0

对不起忘了改标题。 – CodeGuy 2012-07-05 19:14:17

+2

你能提供更多的细节吗?也许'str(t)'和'dput(t)'。或者至少描述你如何创建't'。还值得注意的是't'是一个内置的函数,你已经覆盖,这不是最好的做法。 – Justin 2012-07-05 19:15:18

+0

+1对覆盖基本R函数的注意事项发表评论。从长远来看,完全搞砸了。 – 2012-07-05 19:37:17

回答

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 
0

nls()返回的对象是一个列表。 is.na()在列表中的行为在某种意义上不是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是在你的tTRUE & FALSE值确定按照上述引用的文字逻辑载体。因此所有的

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