2017-03-04 56 views
-2

如何将[中的字符串传递/使用到子集例如阵列。我一直在想这样的事情(对于4 dims阵列):如何通过/使用[子集中的字符串

inputDims <- ",,'CCC'," 

outputArray[parse(text=inputDims)] 

上面不行 - 如何实现这个?

我对[内部使用逻辑向量(或矩阵)并不感兴趣 - 只要是可能的字符串(类似于示例中的形式)。

+0

对于downvoters:你能告诉我该如何处理这样的:http://stackoverflow.com/questions/42578273/array-subset不够相似,您的问题),然后用装包做-element-by-one-dimension-by-name-dynamic,因为这是更复杂的问题,这个问题试图解决它... – RSzT

+0

你想达到什么目的? [动态子集维度](http://stackoverflow.com/questions/42562823/subset-parts-of-array-with-dynamic-dimension)? –

+0

如果你设置了'idx < - “CCC”',那么'outputArray [,idx,]'返回你想要的。 –

回答

0

(这似乎是一个可怕的黑客攻击。无法看到的价值在沿着这些线路进行处理,但也许这将阐明所需要的泥塑的R功能“呼叫”。)

使用scan创建一个字符向量适当的长度。然后将它追加到数组是第一个元素的列表中。需要将“空”位置转换为TRUE,得到切片成功:

vec <- scan(text= inputDims, sep="," , what="") 
arglist <- list(outputArray) 
arglist[ 2:(length(vec)+1) ] <- as.list(vec) 
arglist[ arglist==""] <- TRUE 
# Using your example in the other question 
> do.call("[", arglist) 
    bb bbb 
a1 NA NA 
a2 NA NA 
a3 NA NA 

你是刚才提到abind :: ASUB,如果你蚂蚁看到它与它的参数所做的体操(即

getAnywhere(asub.default) 
+0

不错 - 谢谢!看起来,对于“未使用”模糊使用“TRUE”是至关重要的 - 我没有弄清楚。 – RSzT

+0

在转换为列表之后执行此操作也很重要,因为逻辑否则会根据尝试执行此任务的向量的模式强制为“字符”或“数字”。 –

相关问题