【问题标题】:for loop with decimals and store results in a vector带小数的 for 循环并将结果存储在向量中
【发布时间】: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 循环,查看

For loop in R with increments

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 循环没有。

我错过了什么?

【问题讨论】:

    标签: r loops vector


    【解决方案1】:

    我们可以试试sapply,它会返回一个向量

    sapply(s, function(x) nrow(funny(data, x)))
    
    #[1] 6 5 4 4 3 1
    

    至于为什么您的循环 II 不起作用。如果你这样做,

    for(i in s) {
      print(i)
    }
    

    你会得到

    [1] 0.1
    [1] 0.2
    [1] 0.3
    [1] 0.4
    [1] 0.5
    [1] 0.6
    

    因此,当您尝试在循环 II 中存储 vec[i] &lt;- 时,实际上在第一种情况下您正在执行 vec[0.1],这是不正确的。

    要纠正您的循环,请尝试

    for(i in seq_along(s))  {vec[i]<-(nrow(funny(data,s[i])))}
    vec
    #[1] 6 5 4 4 3 1
    

    seq_along(s) 将返回 #[1] 1 2 3 4 5 6

    【讨论】:

      猜你喜欢
      • 2021-01-03
      • 2022-08-03
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      • 2020-07-24
      • 1970-01-01
      • 1970-01-01
      • 2014-12-07
      相关资源
      最近更新 更多