在R中分配"for loop"

0 loops for-loop r

我有这个数据框t1

    id nobs
1   1  221
2   2  222
3   3  223
4   4  224
5   5  225
6   6  226
7   7  227
8   8  228
9   9  229
10 10  230
Run Code Online (Sandbox Code Playgroud)

并且我想设置例如225的阈值以仅从6-10中选择id.这是我做的,我用了一个for循环:

> t2 <- for (i in 1:length(t1[,"nobs"]))
{
   a <- print({if(t1[, "nobs"][i] > threshold){TRUE}else{FALSE}})
}
Run Code Online (Sandbox Code Playgroud)

它返回

[1] FALSE
[1] FALSE
[1] FALSE
[1] FALSE
[1] FALSE
[1] TRUE
[1] TRUE
[1] TRUE
[1] TRUE
[1] TRUE

> t2
NULL
Run Code Online (Sandbox Code Playgroud)

我在这里不明白,我期望与10个逻辑相同.

我想将t2分配给t2的逻辑向量.我怎样才能做到这一点?为什么[]中的数字都是1而不是1到10.非常感谢你.

jlh*_*ard 6

print(t1$nobs>225)
#  [1] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
Run Code Online (Sandbox Code Playgroud)

R是一种矢量化语言,意味着几乎所有函数(print(...)例如)都在向量上运行.你应该(几乎)永远不必循环遍历R中的循环.

t1$nobs>225具有与t1(10)中的行相同数量的元素的向量也是如此,并且每个元素是逻辑比较的结果.print(t1$nobs>225)只是打印矢量.

回应OP的评论:

t2 <- t1$nobs>25
Run Code Online (Sandbox Code Playgroud)

将创建一个t2长度相同的向量,t1并将其设置为TRUEif t1$nobs>225和FALSEother.