如何使函数参数成为R中向量的元素?

Posted

技术标签:

【中文标题】如何使函数参数成为R中向量的元素?【英文标题】:How to make function argument an element from the vector in R? 【发布时间】:2020-09-07 15:00:20 【问题描述】:

我有一个非数字元素的向量:

all_z <- c("red","yellow","blue")

我正在尝试创建一个函数,该函数需要参数 z 作为向量中的元素之一。该函数还有两个参数:n (is.numeric = FALSE) 和 y (is.numeric = TRUE)。

参数 n 和 y 产生输出 1 和输出 2; z 产生输出 3。目前我的代码看起来像这样(动词和名词是以前定义的向量):

byColor <- function(n,y,z) 
  if ((is.numeric(n) == FALSE) && (is.numeric(y) == TRUE))
  output1 <- sample(verb, 1, replace = FALSE)
  output2 <- sample(noun, 1)
 

我的问题是:我如何才能使 output3 仅在参数 z 是向量 all_z 中的元素时才出现?我的最终目标是将所有三个输出串在一起,但前提是所有这三个参数都得到满足。有没有办法将 z 参数添加到我的“if”语句中?目前我可以获得我想要的输出,但它适用于任何非数字参数作为 z 而不仅仅是向量的元素。我希望我已经写得很清楚了;请让我知道我是否应该进一步详细说明。谢谢!

【问题讨论】:

if(z %in% all_z) output &lt;- something?你的问题我不清楚。您可以根据实际数据调用该函数并编辑您的问题吗? byColor 函数中的第二个 不应该存在。 【参考方案1】:

如果您想知道某个值是否包含在向量中的某处,可以使用%in% 函数。假设 all_z 已经定义,你可以使用类似的东西。

byColor <- function(n, y, z) 
    if ((is.numeric(n) == FALSE) &&
            (is.numeric(y) == TRUE) && 
            (z %in% all_z)) 
                output1 <- sample(verb, 1, replace = FALSE)
                output2 <- sample(noun, 1)
                output3 <- NULL
    

【讨论】:

以上是关于如何使函数参数成为R中向量的元素?的主要内容,如果未能解决你的问题,请参考以下文章

R递归函数调用,无需声明函数参数

如何从具有用户类参数的向量中删除元素?

r语言match函数怎么用

R:通过与另一个函数合成来设置函数的参数。

R中的元素均值

如何编写一个函数将字符向量转换为其元素唯一对的字符向量?