【发布时间】:2011-06-10 10:16:44
【问题描述】:
使用rSymPy 求解方程组,我得到了 x 和 y 的值,它们在这样的字符串中求解系统:
"[(1.33738072607023, 27.9489435205271)]"
我应该如何将这 2 个值分配给变量 x、y?
【问题讨论】:
使用rSymPy 求解方程组,我得到了 x 和 y 的值,它们在这样的字符串中求解系统:
"[(1.33738072607023, 27.9489435205271)]"
我应该如何将这 2 个值分配给变量 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
对于更大的数据集,我喜欢将所有内容放在一起以避免名称过载。
【讨论】:
assign 附加到另一个环境中并附加它,这具有保持全局环境清洁但允许直接访问对象的效果。
with(),除非您附加它...
这里有一些步骤可以完成您想做的事情。不能说它是最有效或最优雅的解决方案......
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
【讨论】:
gsubfn 包中的strapply 使得仅使用相对简单的正则表达式从字符串中提取数字变得相当容易。这里s 是输入字符串,v 是带有两个数字的数字向量:
library(gsubfn)
v <- strapply(s, "[0-9.]+", as.numeric)[[1]]
x <- v[1]
y <- v[2]
【讨论】: