我是R新手,正在try 学习如何创建自己的函数.

虽然以下功能工作正常:

#---------------------
# this works fine
#---------------------
func <- function(df) {
  
 new_df <- unite(df, key, c("Sepal.Length","Sepal.Width"), sep = " ", remove = FALSE, na.rm = FALSE)
 
 return(new_df)
 
}

new_iris <- func(iris)

,该函数中unite函数的第三个参数现在已参数化:

#---------------------
# this does not work
#---------------------
func <- function(df, keycols) {
  
 new_df <- unite(df, key, keycols, sep = " ", remove = FALSE, na.rm = FALSE)
 
 return(new_df)
 
}

keycols <- quote(c("Sepal.Length","Sepal.Width"))

new_iris <- func(iris, keycols)

生成以下错误消息:

Error: Must subset columns with a valid subscript vector. x Subscript has the wrong type 100. i It must be numeric or character.

有没有办法将c("萼片长度"、"萼片宽度")作为参数传递?或者通过某种方式使keycols成为上述用户定义函数的参数?

谢谢你的指导.

推荐答案

你可以采用这两种方法中的任何一种

library(tidyr)
func <- function(df, ...){
  unite(df, key, ..., sep=" ", remove = FALSE, na.rm = FALSE)
}

func(iris, Sepal.Length, Sepal.Width)
#>         key Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
#> 1   5.1 3.5          5.1         3.5          1.4         0.2     setosa
#> 2     4.9 3          4.9         3.0          1.4         0.2     setosa
#> 3   4.7 3.2          4.7         3.2          1.3         0.2     setosa



keycols <- c("Sepal.Length", "Sepal.Width")

func <- function(df, cols){
  unite(df, key, !!cols, sep=" ", remove = FALSE, na.rm = FALSE)
}

func(iris, keycols)
#>         key Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
#> 1   5.1 3.5          5.1         3.5          1.4         0.2     setosa
#> 2     4.9 3          4.9         3.0          1.4         0.2     setosa
#> 3   4.7 3.2          4.7         3.2          1.3         0.2     setosa
#> 4   4.6 3.1          4.6         3.1          1.5         0.2     setosa

reprex package(v2.0.1)于2022-07-08创建

R相关问答推荐

导入到固定列宽的R中时出现问题

在ggplot的注释表格中突出显示最大值

使用spatVector裁剪网格数据时出现的问题

更改编号列表的 colored颜色

如何自定义Shapviz图?

R Highcharts与两个位置关联的注释

selectInput不返回ALL,并将因子转换为shiny 的数字

如何在R中合并和合并多个rabrame?

如何在编辑列时更新可编辑数据表,并使用该表在Shiny中执行连续计算

如何优化向量的以下条件赋值?

par函数中的缩写,比如mgp,mar,mai是如何被破译的?

在ggplot中为不同几何体使用不同的 colored颜色 比例

从外部文件读取多个值作为字符向量

在R中按行按列范围查找最大值的名称

基于数据集属性将科分配给物种

通过初始的shiny 应用更新部署的shiny 应用的数据和参数,其中部署的应用程序显示为URL

带RStatix的Wilcoxon环内检验

按组跨多列创建伪变量

当由base::限定时,`[.factor`引发NextMethod错误

如果满足条件,则替换列的前一个值和后续值