[英]Help on regular expression
使用rSymPy來求解方程組,我得到x和y的值,用這樣的字符串解決系統:
"[(1.33738072607023, 27.9489435205271)]"
我應該如何將這兩個值分配給變量x,y?
要拆分字符串,您可以使用:
vect <- as.numeric(strsplit(gsub("[^[:digit:]\\. \\s]","",x)," "))
x <- vect[1]
y <- vect[2]
這會刪除不是空格,點或數字的所有內容。 strsplit拆分向量中剩下的字符串。 另請參閱相關的幫助文件。
分配可以循環或使用Gavin函數完成。 我只是說出他們的名字。
names(vect) <-c("x","y")
vect["x"]
x
1.337381
對於更大的數據集,我喜歡將事物放在一起以避免使用名稱來重載工作區。
以下是一些可以執行您想要的操作的步驟。 不能說它是最有效或最優雅的解決方案......
string <- "[(1.33738072607023, 27.9489435205271)]"
string <- gsub("[^[:digit:]\\. \\s]", "", string)
splt <- strsplit(string, " ")[[1]]
names(splt) <- c("x","y")
FOO <- function(name, strings) {
assign(name, as.numeric(strings[name]), globalenv())
invisible()
}
lapply(c("x","y"), FOO, strings = splt)
最后一行將返回:
> lapply(c("x","y"), FOO, strings = splt)
[[1]]
NULL
[[2]]
NULL
我們在全球環境中分配了x
和y
> x
[1] 1.337381
> y
[1] 27.94894
strapply
包中的strapply使得只使用相對簡單的正則表達式從字符串中提取數字相當容易。 這里s
是輸入字符串, v
是帶有兩個數字的數字向量:
library(gsubfn)
v <- strapply(s, "[0-9.]+", as.numeric)[[1]]
x <- v[1]
y <- v[2]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.