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