通过组合字符串向量和数字向量来创建新对象

时间:2014-04-20 02:17:55

标签: r object

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

例如,

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

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

但理想情况下,我希望植物种类和年份成为

等功能的一部分

myfunction&lt; -function(year,species){

}

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

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

但是如果他们能够输入他们喜欢的物种并且功能可以识别他们输入的物种数量和年数并返回适当数量的物体,那将会很棒

非常感谢

3 个答案:

答案 0 :(得分: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"

答案 1 :(得分: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"

答案 2 :(得分: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)

希望这会有所帮助!!