我学会了function
和for in
循环,并且试图将循环注入到函数中,以便可以方便地使用循环或在另一个循环中注入循环。
但这是行不通的。
我将向您显示代码。
for(year in c(2016:2018)){x<-c(x,paste("tax",year))}
以此,我成功地制作了[tax 2016, tax 2017, tax 2018]
的序列。
此外,我正在尝试创建一个可以轻松产生[tax 2016, tax 2017, tax 2018, tax 2019, ...]
所以我写了这样的代码
F=function(a){for(year in c(2016:a)){x<-c(x,paste("tax",year))}}
然后
y=F(2020)
,但值“ y”却是
[NULL(empty)]
出什么问题了?在函数中注入循环是不可能的吗?还是还有其他键?
-
答案 0 :(得分:2)
您的代码的一些建议:
x
,因此它必须是在函数外部找到x
,这通常是一件坏事(而且很难解决,因为找出来);快速的变通办法是在x <- c()
循环之前定义x <- character(0)
或以更具“声明性”的方式定义for
; for
循环什么也不返回,因此您的函数也什么也不返回。您需要return
一些东西。for
循环,请尝试paste("tax", 2016:2018)
; F(2)
发生什么?它应该返回递减的"tax 2016", "tax 2015", "tax 2014", ..., "tax 3", "tax 2"
吗?F <- function(a, start = 2016L)
; c
中不需要c(2016:a)
,只需执行2016:a
,即可在此处添加任何内容。请记住以下相同功能的不同变体
F <- function(yr, start = 2016L) {
if (yr >= start) return(paste("tax", start:yr))
return(character(0))
}
F <- function(yr) start = 2016L) {
x <- character(0)
if (y >= start) {
for (y in yr:start) x <- c(x, paste("tax", y))
}
return(x)
}