我有元素的列表清單說:[R編程:創建配對的元素
l <- c("x","ya1","xb3","yb3","ab","xc3","y","xa1","yd4")
出這份名單的,我想使匹配X,Y對的列表,即
(("xa1" "ya1") ("xb3" "yb3") ("x" "y"))
從本質上說,我需要捕捉的X元素,在Y元素,然後將它們配對起來: 我知道該怎麼做了X,Y提取部分:
xelems <- grep("^x", l, perl=TRUE, value=TRUE)
yelems <- grep("^y", l, perl=TRUE, value=TRUE)
了一個Y元素的X元素對當
1. xElem == yElem # if xElem and yElem are one char long, i.e. 'x' and 'y'
2. substr(xElem,1,nchar(xElem)) == substr(yElem,1,nchar(yElem))
沒有秩序的,即匹配xElem和yElem可以定位在任何位置。
但是我不太確定下一部分。我比較熟悉的SKILL programming language(技能是一個LISP衍生物),這是我寫的:
procedure(get_xy_pairs(inputList "l")
let((yElem (xyPairs nil) xList yList)
xList=setof(i inputList rexMatchp("^x" i))
yList=setof(i inputList rexMatchp("^y" i))
when(xList && yList
unless(length(xList)==length(yList)
warn("xList and yList mismatch : %d vs %d\n" length(xList) length(yList))
)
foreach(xElem xList
if(xElem=="x"
then yElem="y"
else yElem=strcat("y" substring(xElem 2 strlen(xElem)))
)
if(member(yElem yList)
then xyPairs=cons(list(xElem yElem) xyPairs)
else warn("x element %s has no matching y element \n" xElem)
)
)
)
xyPairs
)
)
當L RUN,這將返回
get_xy_pairs(l)
*WARNING* x element xc3 has no matching y element
(("xa1" "ya1") ("xb3" "yb3") ("x" "y"))
正如我還是新R,如果你們可以幫忙,我會很感激。此外,我確實瞭解R族人傾向於避免循環,並且更傾向於lapply?
Thx提前。 Riad。
阿南達,非常感謝你的解決方案,完美的作品! – Riad