首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析出R中的一行以选择不同的对象

解析出R中的一行以选择不同的对象
EN

Stack Overflow用户
提问于 2013-04-18 02:06:40
回答 4查看 64关注 0票数 1

我有这样一句话:

代码语言:javascript
复制
system<-c("System configuration: type=Shared mode=Uncapped smt=4 lcpu=96 mem=393216MB psize=64 ent=16.00")

我需要把它解析出来,然后选择smt、lcpu、mem、mpsize和ent到不同的对象中。

例如,我这样做是为了选择smt,但它选择了整个行,你知道我在这里做错了什么吗?

代码语言:javascript
复制
smt<-sub('^.* smt=([[:digit:]])', '\\1', system)

在这种情况下,smt需要有一个数字4。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-18 02:25:03

.*添加到匹配表达式的末尾,您将得到"4“。

代码语言:javascript
复制
sub('^.* smt=([[:digit:]]+).*', '\\1', system) 

您可能希望将我包含在实例中的+添加到超过一个数字的实例中。

您也可以通过拆分空格并查找匹配项来实现此目的:

代码语言:javascript
复制
splits <- unlist(strsplit(system, ' '))
sub('smt=', '', grep('smt=', splits, value=TRUE))
# [1] "4"

或者将其包装在一个函数中:

代码语言:javascript
复制
matchfun <- function(string, to_match, splitter=' ') {
  splits <- unlist(strsplit(string, splitter))
  sub(to_match, '', grep(to_match, splits, value=TRUE))
}

matchfun(system, 'smt=')
# [1] "4"
票数 1
EN

Stack Overflow用户

发布于 2013-04-18 02:24:14

我会多次使用strsplit,而type.convert

代码语言:javascript
复制
parse.config <- function(x) {
   clean  <- sub("System configuration: ", "", x)
   pairs  <- strsplit(clean, " ")[[1]]
   items  <- strsplit(pairs, "=")
   keys   <- sapply(items, `[`, 1)
   values <- sapply(items, `[`, 2)
   values <- lapply(values, type.convert, as.is = TRUE)
   setNames(values, keys)
}

config <- parse.config(system)
# $type
# [1] "Shared"
# 
# $mode
# [1] "Uncapped"
# 
# $smt
# [1] 4
# 
# $lcpu
# [1] 96
# 
# $mem
# [1] "393216MB"
# 
# $psize
# [1] 64
# 
# $ent
# [1] 16

输出是一个列表,因此您可以访问任何已解析的项,例如:

代码语言:javascript
复制
config$smt
# [1] 4
票数 2
EN

Stack Overflow用户

发布于 2013-04-18 04:19:04

下面在gusbfn package中使用strapplyc创建一个列表L,它的名称是左侧,比如smt,值是右侧。

代码语言:javascript
复制
library(gsubfn)

LHS <- strapplyc( system, "(\\w+)=" )[[1]]
RHS <- strapplyc( system, "=(\\w+)" )[[1]]
L <- setNames( as.list(RHS), LHS )

例如,我们现在可以像这样获得smt (对于其他左侧也是如此):

代码语言:javascript
复制
> L$smt
[1] "4"

更新:简化。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16067058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档