這是我第一次寫R函數。我想要做的就是,比如我有A R data.frame
這樣爲什麼當我做R模式匹配時沒有輸出For循環
Vars match
1 A_m 0
2 B_m 0
3 C 0
4 D 34
5 E_m 0
這是我匹配兩段dataframes後得到的結果。在match
列中,如果數字爲0,則表示Vars
列中的值不匹配。例如,在第一行中,A_m在匹配列中有0。這意味着A_m沒有匹配。所以我的功能是在Vars列中找到那些不匹配的值(在匹配列中有0)。之後,如果我發現的值以「_m」結尾,那麼它就是我想要的值,並且我想將它們打印出來。
這是我寫的代碼。因爲我從來沒有寫過R函數,所以我的代碼可能會有很多問題。我想用data.frame
作爲函數的參數,並使用for
循環來檢查整個數據幀。在for循環中,我想用if來決定它是否是目標值。非常感謝您的幫助和耐心。
varsConvert <- function(x){
for(i in 1:nrow(x)){
#x[i,1]is the cordinate of the value in that dataframe, can I write like this?
if(x[i,1] == 0){
#I want to match ends with _m by *_m
if(x[i,0] == "*_m"){
print(x[i,0])
}
else if(x[i,0] == "E"){
print(x[i,0])
}
else{
stop("this is an error")
}
}
}
}
在我的例子我想打印的值應該是A_M,B_M和E_m
模式參數是問題。與'=='一起使用時,'*'不是通配符。您需要學習使用R regex函數。 (雖然我想你可以用'substr()'用'nchar()'進行適當的計算來設置長度。 –
感謝您的幫助!那麼這是我的代碼唯一的問題嗎?如果我使用正確的R正則表達式代碼可以工作嗎? – user5601679
我還沒有試過測試代碼的其餘部分是否有效。我只是想回答你的標題 - 關於你爲什麼失敗的問題。我基本同意ettenne使用for-loops是一個壞主意。 –