我需要访问向量中的索引(单个值)。我认为它类似于:
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回答的非常相似)。
感谢大家的帮助。
答案 0 :(得分:5)
从你的问题来看,你的问题究竟是什么并不明显,但我猜它是以下之一:
选项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)
放在循环体的中间就不会产生任何结果。您需要将其分配给名称或打印它或... 某些东西。你做的一些命令是“做某事”,但由于没有描述他们如何未能提供你所期望的和没有数据,没有人能做些什么来进一步帮助。