从字符对象列表中提取数字对象
问题描述:
我试图逐个递归地提取每个元素以将其放置在循环函数中。下面的表达式中的项目,我从中获取矢量中的以下对象。我想提取每个数字对象的内容。我似乎有重大问题,因为我花了一天的时间尝试这个练习而没有结果。我已经使用noquote从“”中跳出,但这也不起作用,因为它将noquote对象中的对象进行转换。将主对象转换为数字也不起作用,将主对象内的元素转换为数字也不起作用。从字符对象列表中提取数字对象
as.vector(paste("q", paste("[[",1:length(q),"]]"), sep="", collapse=","))
[1] "q[[ 1 ]],q[[ 2 ]],q[[ 3 ]],q[[ 4 ]],q[[ 5 ]],q[[ 6 ]],q[[ 7 ]],q[[ 8 ]],q[[ 9 ]],q[[ 10 ]],q[[ 11 ]],q[[ 12 ]],q[[ 13 ]],q[[ 14 ]],q[[ 15 ]],q[[ 16 ]],q[[ 17 ]],q[[ 18 ]],q[[ 19 ]],q[[ 20 ]],q[[ 21 ]]"
较短的例子
q<-list(c(1,3,5,7,8),c(2,4,6,7,8),c(1,2,5,5,8))
as.vector(paste("q", paste("[[",1:length(q),"]]"), sep="", collapse=","))
[1] "q[[ 1 ]],q[[ 2 ]],q[[ 3 ]]"
编辑:
没有考虑的列表,并从表达产生将如所希望的输出如下可能的错误:
d<- as.vector(paste("q", paste("[[",1:length(q),"]]"), sep="", collapse=","))
d
[1] "q[[ 1 ]],q[[ 2 ]],q[[ 3 ]]"
d[[1]]
[1] 1 3 5 7 8
d[[2]]
[1] 2 4 6 7 8
d[[3]]
[1] 1 2 5 5 8
答
基于对你的问题发表评论,这听起来像你想指定一些指数在q
中,然后从相应的向量中提取最小值和最大值。这可以通过sapply
来完成:
idx <- c(1, 2, 3)
sapply(q[idx], min)
# [1] 1 2 1
sapply(q[idx], max)
# [1] 8 8 8
+0
我正在与lapply一起工作我认为你的解决方案更好,非常感谢和appologies为一个非明确框架的问题。 – Barnaby
您提供的'q'的输出值是多少? – josliber
问题是你有一个字符向量'“q [[1]],q [[2]],q [[3]]”'并且你想解析它以提取'q'的对应值。? – user20650
如果是这样,'lapply(strsplit(d,“,”)[[1]],function(x)eval(parse(text = x)))'是一种方法......但我会重新考虑你的工作流程尝试并避免生成此字符串 – user20650