我提前为这个问题道歉,但我看起来很辛苦,但却找不到解决方案。
如何通过变量中的for循环生成值?
例如:
myfunction <- function(x=1:5) {
for(i in 1:length(x)) {
r<-x[i]
}
print(r)
}
如果我运行上面的代码,我只得到x的最后一个值,在这种情况下为5.我明白这是因为我每次都通过for循环覆盖r。
我也试过了:
myfunction <- function(x=1:5) {
for(i in 1:length(x)) {
r[i]<-x[i]
}
print(r)
}
但我仍然只是得到最后一个值。
我发现的唯一解决方案是在使用r&lt; -numeric(length)之前指定保存生成值的变量的长度:
myfunction <- function(x=1:5) {
r<-numeric(5)
for(i in 1:length(x)) {
r[i]<-x[i]
}
print(r)
}
但如果我不知道预先返回的矢量长度,这个解决方案显然是不够的。
感谢您的帮助!
答案 0 :(得分:2)
你的循环只经过一次,而i = length(x)。你可能想要
for(i in seq(length(x))){
# code here
}
# or
for(i in seq_along(x)){
# code here
}
答案 1 :(得分:1)
您可以初始化长度为0的向量,然后将值附加到它。如果你有数以千计的文件,这将是低效的,只有几百个应该没问题。
myfunction <- function(){
my_vector <- vector(mode = "numeric", length = 0)
for( i in 1:400){
x <- read.csv("my_file") #add code to read csv file.
#Say the file has two columns of data you want to compute the correlation
temp_cor <- cor(x[,1], x[,2])
my_vector <- c(my_vector, temp_cor)
}
return(my_vector)
}
R Inferno的第2章有关于成长向量的良好信息。
答案 2 :(得分:0)
malloc