r - 在 R 中遍历数据帧长度的正确方法

标签 r loops

今天经过相当多的调试后,令我沮丧的是,我发现:

for (i in 1:0) {
     print(i)
}

实际上在R中分别打印了1和0,写的时候出现了问题
for (i in 1:nrow(myframe) {
     fn(i)
}

如果 nrow(myframe)==0,我打算根本不执行。正确的修正只是:
if (nrow(myvect) != 0) {
    for (i in 1:nrow(myframe) {
        fn(i)
    }
}

或者有没有更合适的方法来做我想要在 R 中做的事情?

最佳答案

您可以使用 seq_along反而:

vec <- numeric() 
length(vec)
#[1] 0

for(i in seq_along(vec)) print(i)   # doesn't print anything

vec <- 1:5

for(i in seq_along(vec)) print(i)
#[1] 1
#[1] 2
#[1] 3
#[1] 4
#[1] 5

OP更新后编辑
df <- data.frame(a = numeric(), b = numeric())
> df
#[1] a b
#<0 rows> (or row.names with length 0)

for(i in seq_len(nrow(df))) print(i)    # doesn't print anything

df <- data.frame(a = 1:3, b = 5:7)

for(i in seq_len(nrow(df))) print(i)
#[1] 1
#[1] 2
#[1] 3

关于r - 在 R 中遍历数据帧长度的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24917228/

相关文章:

r - 使用 geom_segment 连接 geom_hline

r - `read_fwf` 和 `vroom_fwf` 意外地跳过第一行?

scala - 使用Scala的回文

c - 取数字并将其存储在C中的 vector 中

r - R中的堆栈向量

r - 延迟评估、dplyr "filter"和 NA

c++ - 为什么标准 R 中值函数比简单的 C++ 替代函数慢得多?

java - 从循环(Arraylist)和几个单独的标志到mysql命令行制作一个字符串

java - 从用户 java 读取一行文本

Ruby 嵌套循环