【发布时间】:2020-11-24 23:52:59
【问题描述】:
当使用 for 和 if else 语句时,我遇到了无法多次将输出分配为向量的问题,如第一个示例中的代码所示。为什么第一个示例在将向量分配给age30output 时失败,即使它正确打印到控制台,而第二个示例有效?有没有办法使第一个示例工作,以便可以将输出分配为[1] NA 31 NA NA 的向量?
编辑:在第一个示例中,我还尝试将 print() 函数替换为 return() 只是为了返回元素 [1] 22 的第一个值以及以下错误消息 - Error: no function to return from, jumping to top level.
ages <- c(22, 31, 26, 54)
age30s <- c(30:39)
第一个例子:
> age30output <- for (i in 1:length(ages)) {
+ if(ages[i] %in% age30s) {
+ print(ages[i])
+ } else {
+ print(NA)
+ }
+ }
[1] NA
[1] 31
[1] NA
[1] NA
> age30output
NULL
第二个例子:
> ages30output <- vector(length = 4)
> age30output <- for (i in 1:length(ages)) {
+ if(ages[i] %in% age30s) {
+ ages30output[i] <- ages[i]
+ } else {
+ ages30output[i] <- NA
+ }
+ }
> ages30output
[1] NA 31 NA NA
【问题讨论】:
-
print没有返回值 -
没有。根据
help('for')、for、while和repeat循环总是返回NULL。另外,看看ifelse函数,我认为它适用于您的用例。 -
for 不返回值,如果您想要返回值的循环,请查看
apply系列,为此任务使用循环也是一种矫枉过正:ages[ages %in% age30s]这将给出你30多岁的年龄也可以使用intersect(ages, age30s)
标签: r