将格式为 1:5 的范围的文本导入从带有 : 运算符的字符转换为数字 string/value 以便在函数中使用
Converting a text import of a range in format 1:5 from character with : operator to a numeric string/value for use in a function
我正在导入一个键,其中每一行都是我编写的函数的参数设置。目标是通过为所有参数集生成输出来批量测试我的函数。这不是很重要。重要的是我导入了一个列,该列在每一行中都包含一个范围值。例如,“1:5”意味着作为值 1:5 输入到参数中。我尝试使用 as.numeric("1:5") 进行强制转换,但 R 对此并不满意。有没有办法从字符值“1:5”
将其强制转换为字符串 c(1,2,3,4,5)
Reduce(':', strsplit(x,":")[[1]])
[1] 1 2 3 4 5
如果x = "1:5"
,我们可以用strsplit
来分隔两个数。然后我们可以使用 Reduce
在拆分上执行运算符 :
。
您的文本是有效代码,因此您可以eval(parse
它
dat$parsed <- lapply(dat$key, function(x) eval(parse(text=x)))
# key parsed
# 1 1:5 1, 2, 3, 4, 5
# 2 1:6 1, 2, 3, 4, 5, 6
# 3 1:4 1, 2, 3, 4
数据
dat <- read.table(text="key
1:5
1:6
1:4", strings=F, header=T)
我正在导入一个键,其中每一行都是我编写的函数的参数设置。目标是通过为所有参数集生成输出来批量测试我的函数。这不是很重要。重要的是我导入了一个列,该列在每一行中都包含一个范围值。例如,“1:5”意味着作为值 1:5 输入到参数中。我尝试使用 as.numeric("1:5") 进行强制转换,但 R 对此并不满意。有没有办法从字符值“1:5”
将其强制转换为字符串 c(1,2,3,4,5)Reduce(':', strsplit(x,":")[[1]])
[1] 1 2 3 4 5
如果x = "1:5"
,我们可以用strsplit
来分隔两个数。然后我们可以使用 Reduce
在拆分上执行运算符 :
。
您的文本是有效代码,因此您可以eval(parse
它
dat$parsed <- lapply(dat$key, function(x) eval(parse(text=x)))
# key parsed
# 1 1:5 1, 2, 3, 4, 5
# 2 1:6 1, 2, 3, 4, 5, 6
# 3 1:4 1, 2, 3, 4
数据
dat <- read.table(text="key
1:5
1:6
1:4", strings=F, header=T)