我想创建一系列新对象,用于在函数中存储分析。 我希望函数有两个参数,一个参数是一串字符串,一个是数字向量。 我对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

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

1回复

R从以相同字符串开头的数字创建向量

我的环境中有多个数字 例如 我想创建一个所有数字的向量,其值以“ num_”开头,而不必逐个写出每个数字,请让我知道该怎么做 所以会是 谢谢
3回复

将字符串向量转换为对象名称向量

示例数据: 生成变量: 给我所有字符串的长度: 为了给我与“对象”相同的结果,我必须对“字符串”做些什么? 到目前为止我最接近的: 但是其余的呢?
2回复

R:从字符串名称向量调用矩阵?

想象一下,我有100个数字矩阵,每个矩阵有5列。 我将这些矩阵的名称保留在向量或列表中: 我也有一个系数“ coef”的向量, 我想以这种方式计算结果向量: 如何使用名称的向量以紧凑的方式进行操作? 就像是: 我认为关键是如何从字符串中调用对象的名称,用法
3回复

组合字符串以指向R中的对象

我已经在寻找这个答案好几个星期了,它必须在这里,但在任何地方都找不到! 有没有一种组合字符串和数字以指向对象的方法? 基本上我有9个对象,分别称为P1,P2,P3等,并希望使用9个数字的排列来访问它们。 我知道这行不通,但这就是我要的想法。 我希望对象a现在成为对象P5(或任何
2回复

如何在R中创建对象向量? [重复]

这个问题已经在这里有了答案: 从R 2中的 循环返回单独的txt文件 答案 我需要使用R的QuantLib软件包来计算金融期权的隐含波动率。由于函数“ EuropeanOptionImpliedVolatility”的输出是一个对象(称为“隐含波动率”),因此无法使
2回复

如何测试对象是否为向量

如何测试一个对象是否是一个向量,即模式logical , numeric , complex或character ? is.vector的问题是它也为列表和其他类型返回TRUE : 我想知道它是否是原始类型的向量。 是否有本机方法,或者我必须通过存储模式?
1回复

在操作中使用字符串作为对象名称

我一般对R和R编程都缺乏经验,所以如果我的代码不好,请原谅我。 我要解决的问题是将许多单独的csv文件加载到R中,整理一下输入内容,对所得对象执行一些操作,并最终绘制出这些操作的结果。 我尝试解决的方法是使用字符串向量,该向量回显对象名称以调用有问题的对象。 这是行不通的。 下面
2回复

R:使字符串引用对象

我有一个很大的文件列表( file1 , file2 , file3等),对于每次分析,我都希望从该列表中引用两个文件(例如function(file1,file2) )。 当我尝试使用paste0("file", pairs[1,x]来执行此操作时paste0("file", pairs[1
2回复

从字符串更改为对象[重复]

这个问题已经在这里有了答案: R:使用paste()构建具有许多列的数据框 2个答案 假设我有以下语法: 因此,使用cbind可以显示以下内容: 但是,语法: 不给我 使用粘贴功能可以显示以下内容:
2回复

通过数据帧中的字符向量对我的R列表进行分组

我有一个r对象,即列表d。 我希望引用此列表的子集的数据框作为函数“ myfunction”的变量。 该函数将使用rslurm调用数千次,每次使用d的不同子集。 示例:d [['1']] [[3]]引用列表中的数据矩阵。 工作正常,但我希望能够从数据框中调用这些子集。 我