【发布时间】:2017-08-06 04:06:08
【问题描述】:
我正在研究 R 中的 for 循环,我必须将结果存储在向量中。我知道这是一个很常见的答案,我的问题不存在,但让我们继续订购。
我得到了这些数据:
# here the data
alpha <- c(1,2,3,4,5,6)
beta <- c(0.1,0.5,0.3,0.4,0.5,0.6)
data <- data.frame(alpha, beta)
我做了一个简单的函数来选择高于某个阈值的数据:
# here the function
funny <- function(x,k)
{x[x[,2]>=k,]}
# here an example of the function
funny(data,0.5)
alpha beta
2 2 0.5
5 5 0.5
6 6 0.6
但我想要的是超过阈值的行数,所以:
# here the result wanted
nrow(funny(data,0.5))
[1] 3
所以我有一个问题:在函数的参数 k 的变化中,有多少行超过了阈值?我想把结果放在一个向量中。我创建了一个 for 循环,查看
Saving results from for loop as a vector in r
我创建了这个:首先让我们看看是否一切正常:
# here the sequence
s <-seq(0.1,0.6, by = 0.1)
# here the I loop
for(i in s) {print(nrow(funny(data,i)))}
[1] 6
[1] 5
[1] 4
[1] 4
[1] 3
[1] 1
但很明显,这并没有存储在向量中。问题就在这里。我试过了:
# already written sequence
s <-seq(0.1,0.6, by = 0.1)
# here the empty vector
vec <- vector("numeric")
# here the II problematic loop
for(i in s) {vec[i]<-(nrow(funny(data,i)))}
vec
这里是我不想要的结果,我期望像[1] 6 5 4 4 3 1这样的结果
[1] 0 0 0 0 0 0
更多信息: 我尝试过这样的事情:
# sequence * 10
s <-seq(1,6, by = 1)
# here the vector
vec <- vector("numeric")
# and the III loop, that it works now.
for(i in s) {vec[i]<-(nrow(funny(data,i/10)))}
vec
[1] 6 5 5 4 3 1
但我不喜欢这样,因为我不明白为什么 III 工作以及为什么 II 循环没有。
我错过了什么?
【问题讨论】: