我想创建一系列新对象,用于在函数中存储分析。 我希望函数有两个参数,一个参数是一串字符串,一个是数字向量。 我对R相当缺乏经验,所以如果你能解释一下我会非常感激,同样详细的细节,我看到很多人推荐粘贴和分配的组合在类似的情况下,但我不能得到它工作正常,我也看到很多关于使用lapply的建议,但是我无法理解lapply是如何工作的,所以如果有人有技能以外行人的话来指导我,那将是一个巨大的帮助,非常感谢。

例如,

plant_species<-c("speciesA", "speciesB", "speciesC")
years<-(2005:2007)

其中我想创建以下对象:speciesA2005,speciesA2006,speciesA2007,种B2006,种B2008,种C2006,种C2007,种C2008。

但理想情况下,我希望植物物种和年份成为一部分功能

myfunction <-function(年,种){

}

我可以把它给别人,所以他们所要做的就是输入

myfunction(2005:2007, "speciesA", "speciesB", "speciesC")

但如果他们可以根据自己的喜好输入尽可能多的物种并且功能会识别他们输入的物种数量和年份并返回适当数量的物体,那将会很棒

非常感谢

===============>>#1 票数:2 已采纳

如果我对所需输出的拼写错误的假设是正确的话,我可以修改这个(即如果你真的想要所有物种的2005-2007而不是2005-2007的第一个,然后是2006-2008的剩余的那些):

myfunction <- function(years, species) {
  dat <- expand.grid(species, years)[,1:2]
  return(sort(sprintf("%s%s", dat$Var1, dat$Var2)))
}

myfunction(years, plant_species)
## [1] "speciesA2005" "speciesA2006" "speciesA2007" "speciesB2005" "speciesB2006" "speciesB2007"
## [7] "speciesC2005" "speciesC2006" "speciesC2007"

===============>>#2 票数:1

这个函数的行为与您描述的完全一样,以及“种类”本身就是一个向量的情况:

myfunction <- function(year, ...) {
  species <- list(...)
  if (length(species[[1]]) > 1) species <- rep(species[[1]], each = length(year))
  else species <- rep(unlist(list(...)), each = length(year))
  paste0(species, year)
}

myfunction(year=2005:2007, "A", "B", "C")
# [1] "A2005" "A2006" "A2007" "B2005" "B2006" "B2007" "C2005" "C2006" "C2007"

myfunction(2005:2007, c("A", "B", "C"))
# [1] "A2005" "A2006" "A2007" "B2005" "B2006" "B2007" "C2005" "C2006" "C2007"

===============>>#3 票数:0

有很多方法可以解决这个问题,许多软件包都具有执行此操作的功能。 但是,这是一个非常基本的简单方法:

# Step1: define an new empty vector
newVector <- NULL

# Step2:
# start a loop over one of the variables
# paste with all elements of second variables, and append newVector
for(spec in plant_species)   newVector <- c(b,paste(spec,years,sep=""))  

# see the results
newVector  

所以函数看起来像这样:

myFunction <- function(years, plant_species) {
  newVector <- NULL
  for(spec in plant_species)   newVector <- c(b,paste(spec,years,sep=""))  
  return(newVector)
}

myFunction(years, plant_species)

希望这可以帮助!!

  ask by alexk translate from so

未解决问题?本站智能推荐: