我正在写一个基本的for循环,其中除了最后一行之外,所有的输出都应该是相同的,但是我的if语句总是被忽略,即使条件是TRUE
。
test_string <- c("test", "test2", "test3")
i <- 1
for(i in length(test_string)) {
answer <- if(i < length(test_string)) {
paste0("This is not the last '%", test_string, "%'")
} else{
paste0("This IS the LAST '%", test_string, "%'")
}
i <- i+1
}
#> [1] "This IS the LAST '%test%'" "This IS the LAST '%test2%'"
#> [3] "This IS the LAST '%test3%'"
4条答案
按热度按时间o7jaxewo1#
尝试在第一行添加seq_沿着(),如下所示:
要将输出存储为变量:
yc0p9oo02#
因为
i
在循环中总是3
。要看到这一点,添加
print(i)
作为循环的第一行。然后我会删除尽可能多的代码,同时仍然保留错误。当我在这里这样做时,我会得到这样的结果:
实际上,我们现在唯一能做的就是将
length(test_string)
放入控制台:也就是说,您实际上根本不是在“循环”,而是将
i
设置为单个值(3),然后运行一次单个代码块。因此,当我用这个新表达式更新
for
循环时,我想我得到了您最初期望的结果:juud5qan3#
你需要通过1循环到向量的
length
(即1:length(test_string)
)。此外,你需要迭代test_string
(即test_string[i]
)。如果你先初始化answer
,然后将循环的每一步结果赋给它,那么你会得到一个与test_string
大小相同的向量,并得到所需的输出。由reprex package(v2.0.1)于2023年3月17日创建
rfbsl7qr4#
你忘了两件事:
for
子句声明和[i]
中长度之前的1:
,用于访问test_string的元素:您将获得所需的结果:
然而我认为有必要注意到常见的
for
等循环在R中通常比较慢。有很多方法可以让它以“Rly”的方式访问矢量化函数的值...下面是一个以R为底数的例子:
这将为您提供一个向量结果:
这段代码更短、更快、更清晰,便于以后在R中编辑。