strsplit和lapply

Lay*_*yla 1 r strsplit

我在表单的某些文本中有一个字符串"12,34,77",包括引号.

我需要将每个数字的值放入列表中.我尝试使用lapplystrsplit:

control2=lapply(strsplit(data$values,","),as.numeric)
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

非角色论证

我究竟做错了什么?

G. *_*eck 10

1)strapply

1a)标量这是使用strapplygsubfn包的单线程:

library(gsubfn)
x <- '"12,34,567"'

strapply(x, "\\d+", as.numeric, simplify = c)
## [1]  12  34 567
Run Code Online (Sandbox Code Playgroud)

1b)矢量化矢量化版本甚至更简单 - 只需删除simplify=c如下:

v <- c('"1,2,3"', '"8,9"') # test data
strapply(v, "\\d+", as.numeric)`
Run Code Online (Sandbox Code Playgroud)

2)gsub和扫描

2a)标量,这里是一个单线性使用gsubscan:

scan(text = gsub('"', '', x), what = 0, sep = ",")
## Read 3 items
## [1]  12  34 567
Run Code Online (Sandbox Code Playgroud)

2b)矢量化矢量化版本将涉及lapply组件:

lapply(v, function(x) scan(text = gsub('"', '', x), what = 0, sep = ","))
Run Code Online (Sandbox Code Playgroud)

3)strsplit

3a)标量,这是一个strsplit解决方案.请注意,我们分开在两个",:

as.numeric(strsplit(x, '[",]')[[1]][-1])
## [1]  12  34 567
Run Code Online (Sandbox Code Playgroud)

3b)矢量化矢量化解决方案将再次涉及lapply组件:

lapply(v, function(x) as.numeric(strsplit(x, '[",]')[[1]][-1]))
Run Code Online (Sandbox Code Playgroud)

3c)矢量化 - 更简单或更简单:

lapply(strsplit(gsub('"', '', v), split = ","), as.numeric)
Run Code Online (Sandbox Code Playgroud)