【问题标题】:R select data through loop in Move objectR通过移动对象中的循环选择数据
【发布时间】:2018-07-12 10:37:36
【问题描述】:

我正在尝试使用循环来选择 Move 数据集的第一个和最后一个日期 - 每只动物。我按如下方式创建了循环,将 MMunstacked 作为我的 Move 对象:

> ID <- c("AP002", "AP003", "AP004", "AP005", "AP006", "AP007")
for (i in 1:length(ID)) {
  print(ID[i])
  print(head(timestamps(MMunstacked$ID[i]), n=1))
  print(tail(timestamps(MMunstacked$ID[i]), n=1))
}

但它给了我以下警告:

Error in (function (classes, fdef, mtable): unable to find an inherited method for function 'timestamps' for signature "NULL" 

这是因为

> MMunstacked$ID[i]
NULL

然而

> ID[1] 
"AP002"

两者都有

> MMunstacked$"AP002" 
> MMunstacked$AP002 

给我想要的数据。

但如果我把它们放在一起:

> MMunstacked$ID[1] 
NULL

它再次给了我NULL,这可能是循环中发生的事情。 我对 R 中的这个对象没有太多经验,似乎无法在网上找到答案。

我想,也许是因为班级,但似乎并非如此。 只输入MMunstacked$AP002和从ID中提取的“AP002”肯定有区别,但我不知道是什么?

【问题讨论】:

    标签: r timestamp move


    【解决方案1】:

    您不能像这样混合寻址。 $ 运算符之后的部分将不会被评估并转换为您想要的名称。你可以使用[[操作符来达到想要的效果。

    ID <- c("A")
    test <- list("A" = "result")
    test[[ID[1]]]
    

    这样,双括号中的内容首先被评估,然后测试列表被调用一个名称。

    【讨论】:

    • 非常感谢!我已经认为这可能是一个简单的解决方案:)
    猜你喜欢
    • 2020-08-26
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 2022-07-12
    相关资源
    最近更新 更多