R 使用get()访问结构中的深层数据

R 使用get()访问结构中的深层数据,r,get,apostrophe,R,Get,Apostrophe,我在R内存中有一个p结构,我试图访问矩阵的Rate列 当我在控制台中键入p$6597858$Sample时,我得到 p$`6597858`$Sample Rate Available X Y [1,] 1.01 1520.93 0.00 0.0 [2,] 1.02

我在R内存中有一个
p
结构,我试图访问矩阵的
Rate

当我在控制台中键入
p$6597858$Sample
时,我得到

 p$`6597858`$Sample
        Rate             Available                 X                    Y
[1,]    1.01              1520.93                0.00                  0.0
[2,]    1.02               269.13                0.00                  0.0
[3,]    1.03               153.19                0.00                  0.0
[4,]    1.04               408.80                0.00                  0.0
等等

当我尝试

get("p$`6597858`$Sample[,1]") 
我把这个退了

object 'p$`6597858`$Sample[ ,1]' not found

这是撇号问题吗?

无论是
$
还是
[[
操作符都不能在
get()
中工作(因为
p[[1]]
不是R对象,它是对象的组件
p

你可以试试

p <- list(`6597858`=list(Sample=data.frame(Rate=1:3,Available=2:4)))
z <- eval(parse(text="p$`6597858`$Sample[,1]"))
编辑:哈德利·威克姆在评论中建议)或

总的来说

  • 直接从列表中提取元素比使用
    get()
  • 为列表元素使用非标准名称(例如,需要使用反勾号保护的纯数字)是不明智的
  • [[
    $

    • 无论是
      $
      还是
      [[
      操作符都不能在
      get()
      中工作(因为
      p[[1]]
      不是R对象,它是对象
      p
      的一个组件)

      你可以试试

      p <- list(`6597858`=list(Sample=data.frame(Rate=1:3,Available=2:4)))
      z <- eval(parse(text="p$`6597858`$Sample[,1]"))
      
      编辑:哈德利·威克姆在评论中建议)或

      总的来说

      • 直接从列表中提取元素比使用
        get()
      • 为列表元素使用非标准名称(例如,需要使用反勾号保护的纯数字)是不明智的
      • [[
        $

      我强烈建议
      get(“p[[[
      6597858
      ]][[“Sample”]][1]”)
      ;如果你能帮忙的话,我更强烈地建议避免使用非标准名称并使用
      get()
      ,我得到了这个复杂的p结构,它有子结构,其中一个被命名为
      6597858
      >类(p$
      6597858
      )[1]“列表”好的,你被非标准命名所困扰——但是为什么你需要
      get
      ?你想做什么?我得到了一个复杂的p结构,它有子结构,其中一个名为
      6597858
      。这个6597858值将在我的程序过程中改变,因此我需要创建动态变量。更多信息…>class(p$
      6597858
      )[1]“list”>class(p$
      6597858
      $Sample)[1]“matrix”不过我认为你不需要
      get
      。请看下面的例子。我强烈建议
      get(“p[
      6597858
      ][Sample]][1]”)
      ;我甚至更强烈建议避免使用非标准名称和
      get()
      ,如果你能帮忙的话……我得到了这个复杂的p结构,它有子结构,其中一个叫做
      6597858
      >类(p$
      6597858
      )[1]“列表”好的,你被非标准命名所困扰——但是为什么你需要
      get
      ?你想做什么?我得到了一个复杂的p结构,它有子结构,其中一个名为
      6597858
      。这个6597858值将在我的程序过程中改变,因此我需要创建动态变量。更多信息…>class(p$
      6597858
      )[1]“列表”>类(p$
      6597858
      $Sample)[1]“矩阵”不过,我认为您不需要
      获取
      。请参见下面的示例。这两个建议都有效。对于第二个建议,我注意到您删除了开头和结尾的撇号。我不明白,最初也不会猜到。感谢您的帮助,本!非常感谢。我无法投票支持您,因为我没有必要的声誉ion:)反勾号不是标准的引号字符,它们是“保护”字符。(使用它们已经意味着你进入了非标准/棘手的领域。)你不能投票给我,但你可以接受答案(点击复选标记)如果您愿意的话。两点:在本例中,您可以使用引号而不是反勾号,并且可以通过使用递归索引稍微缩短索引:
      p[[c(as.character(需要),“Sample”,“Rate”)]]
      这两个建议都起作用了。为了第二个建议起作用,我注意到你去掉了开头和结尾的撇号。我不明白,本来也不会猜到。感谢你的帮助,本!非常感谢。我不能投票支持你,因为我没有必要的声誉:)反勾不是标准的引号字符,它们是“保护”字符。(使用它们已经意味着你正在冒险进入非标准/棘手的领域。)你不能投票给我,但如果你愿意,你可以接受答案(点击复选标记)。两点:在这种情况下,你可以使用引号而不是反勾号,你可以通过使用递归索引稍微缩短索引:
      p[[c](如字符(需要)、“采样”、“速率”)]
      needed <- 1234
      x <- p[[as.character(needed)]][["Sample"]][,"Rate"]
      
      x <- p[[c(as.character(needed),"Sample","Rate")]]
      
      library(fortunes)
      fortune(106)
      
      If the answer is parse() you should usually rethink the question.
         -- Thomas Lumley
            R-help (February 2005)