有没有办法访问向量中的索引

时间:2011-08-28 15:06:40

标签: arrays r vector indexing

我需要访问向量中的索引(单个值)。我认为它类似于:

v1 <- c(a,b,c,d,e)
v1[3] = h

但这似乎根本不起作用,其他人都知道如何做到这一点?

[编辑] 好的回答你的一些问题,这里是我想要实现整体目标的更大图景:

MyDataR1 <- scan("myd1.txt",what='character') 
MyDataR2 <- scan("myd2.txt",what='character') 
MyDataR3 <- scan("myd3.txt",what='character')
MyDataR4 <- scan("myd4.txt",what='character') 

AmpsR1 <- vector(mode='numeric',length=length(MyDataR1)-1)
AmpsR2 <- vector(mode='numeric',length=length(MyDataR2)-1)
AmpsR3 <- vector(mode='numeric',length=length(MyDataR3)-1)
AmpsR4 <- vector(mode='numeric',length=length(MyDataR4)-1)

AmpsR <- list(AmpsR1,AmpsR2,AmpsR3,AmpsR4)
DatesR <- list(DatesR1,DatesR2,DatesR3,DatesR4)
MyDataR <- list(MyDataR1,MyDataR2,MyDataR3,MyDataR4)

for (m in 1:length(MyDataR)){
mode(MyDataR[m])
length(MyDataR[m])
for (i in 2:length(MyDataR[m])){ 
temp <- unlist(strsplit(MyDataR[[m]][i],',')) 
DatesR[[m]][i-1] <- temp[2] 
if (length(temp) == 7) 
AmpsR[[m]][i-1] <- as.numeric(temp[6]) 
else 
AmpsR[[m]][i-1] <- NA 

end 

(我在某一点改变了我的策略,使用“c()”函数而不是创建列表,但是这也没有用)。 所以我试图在列表中每个向量的每个值之间进行迭代并设置它的值,但是当我在for循环部分之后打印“AmpsR”时,所有值都是“0.000”。我知道它正在读取的数据是有效的,因为当我打印“MyDataR1”时,它充满了所有相关值。

有什么想法或建议更好的方法吗? 感谢大家的投入。

[编辑]对我在提出另一个问题时添加的类似帖子道歉,只是这个问题没有直接解决我遇到的问题。无论从两者中找到答案,我现在已经更好地理解了列表和向量是如何工作的,我设法解决了我的问题(解决方案与Andrie回答的非常相似)。

感谢大家的帮助。

3 个答案:

答案 0 :(得分:5)

从你的问题来看,你的问题究竟是什么并不明显,但我猜它是以下之一:

  1. 您没有正确引用字符串。
  2. 您使用的是不存在的变量。
  3. 你实际上是想创建一个列表,而不是一个连接的向量
  4. 选项1:使用引号标记来表示字符向量(字符串)

    v1 <- c("a", "b", "c", "d", "e")
    v1[3] <- "h"
    v1
    [1] "a" "b" "h" "d" "e"
    

    选项2:您尚未定义变量a-e和h

    > a <- 1
    > b <- 2
    > c <- 3
    > d <- 4
    > e <- 5
    > h <- 8
    > v1 <- c(a,b,c,d,e)
    > v1[3] = h
    > v1
    [1] 1 2 8 4 5
    

    选项3:您打算创建列表

    在这种情况下,您应该使用list而不是c。请记住,您使用双方括号索引列表。

    a <- 1:5
    b <- 6:10
    c <- 11:15
    d <- 16:20
    e <- 21:25
    h <- 26:30
    v1 <- list(a,b,c,d,e)
    v1[[3]] <- h
    

    清单:

    v1
    [[1]]
    [1] 1 2 3 4 5
    
    [[2]]
    [1]  6  7  8  9 10
    
    [[3]]
    [1] 26 27 28 29 30
    
    [[4]]
    [1] 16 17 18 19 20
    
    [[5]]
    [1] 21 22 23 24 25
    

    列表中的元素3:

    v1[[3]]
    [1] 26 27 28 29 30
    

答案 1 :(得分:1)

> v1 <- c(1,2,3)
> v1[1] <- 5
> v1
[1] 5 2 3
嗯,那应该有用。我不确定你的问题是什么。在您的示例中,a,b,c,d,e和h是否都已定义?或者你应该将它们用作字符串(即“a”,“b”等)?

答案 2 :(得分:1)

如果你有四个向量:v1,v2,v3,v4。然后有(至少)两种顺序访问它们的方法:

艰难的方式(IMO):

for ( i in 1:4 ) {print( get(paste("v", i, sep="") ) ) }

正确的方式(也是IMO):

vlist <- list(v1, v2, v3, v4)
for (v in vlist) print(v)

在您的修订版中,您似乎构建了第三种方式:

vlist <- list(v1, v2, v3, v4)
for (v in 1:length(v) ) print( vlist[v] )

...我想说的是前两个结构之间的正确性。您需要学习的另一件事是,在一个循环中,您需要对值进行处理。只需将mode(item)放在循环体的中间就不会产生任何结果。您需要将其分配给名称或打印它或... 某些东西。你做的一些命令是“做某事”,但由于没有描述他们如何未能提供你所期望的和没有数据,没有人能做些什么来进一步帮助。