在R中,如何将列作为参数传递给strsplit?

在R中,如何将列作为参数传递给strsplit?,r,tidyverse,R,Tidyverse,将列作为参数传递给str_split函数并将其识别为列的正确方法是什么 library(tidyverse) library(lazyeval) df = data.frame("x"=c("apple/pear","pear/banana/kiwi","orange/pear")) function (col) { mtcars %>% select(col) %>% transform(col = interp(strsplit(~v, "/"), v=as.n

将列作为参数传递给str_split函数并将其识别为列的正确方法是什么

library(tidyverse)
library(lazyeval)
df = data.frame("x"=c("apple/pear","pear/banana/kiwi","orange/pear"))
function (col) {
  mtcars %>%  
  select(col) %>% 
  transform(col = interp(strsplit(~v, "/"), v=as.name(col)) )
}

目前这是返回错误“strsplit(~v,“-”)中的错误:非字符参数”

我们可以使用
tidyverse
选项,而不是将
base R
与tidyverse混合使用
separate_rows
from
tidyr
拆分列并将其重塑为“long”格式。在函数内部,我们可以使用curly-curly操作符(
{{}}
)来计算函数的无引号参数

library(dplyr)
library(tidyr)
f1 <- function(data, col) {
           data %>%
                separate_rows({{col}}, sep="/")
   }

f1(df, x)
库(dplyr)
图书馆(tidyr)
f1%
分隔_行({col},sep=“/”)
}
f1(df,x)

我们可以使用
tidyverse
选项,而不是将
base R
与tidyverse混合使用
separate_rows
from
tidyr
拆分列并将其重塑为“long”格式。在函数内部,我们可以使用curly-curly操作符(
{{}}
)来计算函数的无引号参数

library(dplyr)
library(tidyr)
f1 <- function(data, col) {
           data %>%
                separate_rows({{col}}, sep="/")
   }

f1(df, x)
库(dplyr)
图书馆(tidyr)
f1%
分隔_行({col},sep=“/”)
}
f1(df,x)

base
strsplit
函数需要字符向量输入。从
?strsplit
,“其他输入,包括系数,将给出错误。”所有
mtcars
列都是数字,而不是字符。因此出现了错误“非字符参数”。如果您切换到
stringr::str_split
,如标题所示,您可能会成功。否则,请在拆分之前转换为
字符。我添加了一个虚拟数据框,以说明如何在函数外部运行此代码?您使用的基本
strsplit
函数需要字符向量输入。从
?strsplit
,“其他输入,包括系数,将给出错误。”所有
mtcars
列都是数字,而不是字符。因此出现了错误“非字符参数”。如果您切换到
stringr::str_split
,如标题所示,您可能会成功。否则,请在拆分之前转换为
字符。我添加了一个虚拟数据框,以说明如何在函数外部运行此代码?太棒了。{{}是一种传递参数并将其识别为列的符号吗?@santoku是的,它是一种紧凑的方式,可以组合
!!enquo(col)
太棒了。{{}是一种传递参数并将其识别为列的符号吗?@santoku是的,它是一种紧凑的方式,可以组合
!!enquo(col)