r - 为什么当我对任何东西运行 for 循环时,R 只保存最后一个结果?
问题描述
test <- c(0,1,2,3,4,4,4)
for(i in test) {
savethis <- c(i)
}
print(savethis)
无论我尝试什么,这总是输出 4。我想将所有向量值保存到 savethis 中。
解决方案
我假设您不想只复制 vector test
。for
如果没有,基本上有两种方法可以使用循环来做你想做的事情。
一,如果你知道输出的大小。
例如,如果您知道输出与输入的大小相同,您可以预先创建一个输出向量,并在循环中使用标准索引分配值。
test <- c(0, 1, 2, 3, 4, 4, 4)
savethis <- numeric(length(test)) # Do this outside the loop
for(i in seq_along(test)) {
savethis[i] <- test[i]
}
print(savethis)
另一个,如果您不知道输出的大小。
在这种情况下,您应该在循环外创建一个长度为零的向量,并在循环内扩展该向量
savethis <- NULL
for(i in test) {
savethis <- c(savethis, i)
}
print(savethis)
或者使用索引 into test
,就像上面的第一个示例一样。
savethis <- NULL
for(i in seq_along(test)) {
savethis[i] <- test[i]
}
print(savethis)
请注意,尽管此循环使用与第一个完全相同的指令,但它以完全不同的方式工作。在循环length(savethis)
为零之前。所以该值savethis[1]
不存在,它是第一次通过循环创建的,然后savethis[2]
,等等。
如果您确实知道输出的大小,那么上面的第一个示例总是最好的。另外两个迫使 R 一遍又一遍地调用内存管理例程,浪费处理时间。
推荐阅读
- saml-2.0 - 使用 itfoxtec-identity-saml2 库的 Saml2AuthnRequest 和 Saml2AuthnResponse 中的自定义属性
- python - 安装和导入 pynput 时出错
- javascript - 我可以使用 GA4 事件来跟踪下载 pdf 的按钮吗?
- raspberry-pi - 如何将 Raspberry Pi 4 与 PC(运行 Gazebo)通信并在 Pi 上获取传感器主题?
- delphi - Delphi Teechart how to increase line width of second chart
- google-cloud-platform - 尝试连接到 Google Cloud Storage 时出错
- python - Statsmodels ARIMA、值警告、日期索引和相关频率信息
- amazon-web-services - 在某些情况下,awsRequestIds 在 lambda 调用之间不是唯一的
- laravel - 在laravel中获取上一个网址
- asp.net-core - 创建 Blazor 服务器登录页面以获取 Jwt