【问题标题】:Accessing a vector inside a vector [duplicate]访问向量内的向量[重复]
【发布时间】:2011-09-06 15:19:27
【问题描述】:

可能重复:
Is there a way to access an index within a vector

我最近发布了一个类似的问题,但是我并没有真正收到答案。 我需要访问一个向量列表中的一个向量,这是目前代码的样子:

MyDataR1 <- scan("D:\\R Code\\Residential\\bvl5 res.txt",what='character') 
MyDataR2 <- scan("D:\\R Code\\Residential\\bvl5 res.txt",what='character') 
MyDataR3 <- scan("D:\\R Code\\Residential\\cpk11 res.txt",what='character')

MyDataR <- c(MyDataR1,MyDataR2,MyDataR3)
print (MyDataR[3])

但是打印命令实际上并没有打印第三个向量 (MyDataR3),它从第一个向量 (MyDataR1) 中打印出第三个值

有什么方法可以访问向量中的各个向量吗?我将如何访问向量中向量的单个值?我以为它会是这样的:

MyDataR[[3]][5] <- 5    #this would access the 5th value of the 3rd vector and modifies it

任何帮助将不胜感激。

【问题讨论】:

  • str(MyDaraR1)str(MyDaraR) 向我们展示了什么?我怀疑c() 操作只是将三个向量卡在一个向量中,因此观察到了行为。如果您将每个向量放入一个列表中,那么您显示的内容应该可以工作; MyDataR[[3]] 将返回列表的第三个组件,并且您显示的替换代码也将起作用。通过MyDataR &lt;- list(MyDataR1,MyDataR2,MyDataR3) 形成您的列表
  • 这与您一周前提出的问题基本相同:Is there a way to access an index within a vector。即使@Andrie 向您展示了他对您之前问题的回答的不同之处,您仍然会将向量与列表混淆。
  • @Ice Phoenix:不要看这个评论;它会进一步混淆。 @Joshua Ulrich:试试is.vector(list())
  • @Richie Cotton:是的,列表在技术上是向量,但我遇到的大多数 R 用户将原子类型称为“向量”,将“列表向量”称为“列表”。这很令人困惑。你会如何解释得更清楚?

标签: r vector indexing


【解决方案1】:

问题在于这一行:

MyDataR <- c(MyDataR1,MyDataR2,MyDataR3)

没有做你认为它正在做的事情。它将三个参数组合成一个向量。这是正在发生的事情的可重现示例:

foo <- 1:3
bar <- 4:6
baz <- 7:9

foobarbaz <- c(foo, bar, baz)
> foobarbaz
[1] 1 2 3 4 5 6 7 8 9

你要做的是创建一个列表对象:

mylist <- list(foo, bar, baz)
> mylist[3]
[[1]]
[1] 7 8 9

并且可以如你所想的那样被索引:

mylist[[3]][2] <- -1
> mylist[3]
[[1]]
[1]  7 -1  9

【讨论】:

    【解决方案2】:

    c 是串联的缩写,所以这种行为是显而易见的。尝试改用list

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 2011-11-29
      • 1970-01-01
      • 2013-02-12
      • 1970-01-01
      • 2011-10-20
      • 2018-12-16
      相关资源
      最近更新 更多