2017-10-05 136 views
1

我有一個關於substr的問題,但我不知道它是否需要使用。我將示例簡化爲最小化,所以我只需要將結果複製到一個函數中並循環。假設你有一個日期框架(「House」),但是在函數內部,你必須將它作爲輸入。由於會有很多數據框經過它,所以它不能被稱爲「House」。Substract通過函數參數傳遞對象名稱

所以,數據幀「房子」。在函數內部,獲取輸入的名稱。但是,我想比較數據框名稱的三個首字母與「Hou」。如果它是真的,它會返回一些值,如果它是假的,則返回另一個值。

我已經嘗試過,但我無法弄清楚。我不知道是否有人能夠幫助我,否則我的問題將永遠陷入黑點。

任何幫助將是有用的。我需要回答者是[1] TRUE

House <- data.frame("SN" = 1:2, "Country" = c("Spain","France"), "Name" = c("John","Dora")) 

input <- House 

((substr("input", start=1, stop=3) == "Hou")) 

[1] FALSE 

Is there any way, to make this TRUE? I always get FALSE, as what it´s doing is compare "inp" with "Hou". 

If I take the quotes out, 

House <- data.frame("SN" = 1:2, "Country" = c("Spain","France"), "Name" = c("John","Dora")) 

input <- House 

(substr(input, start=1, stop=3) == "Hou")) 

[1] FALSE FALSE FALSE 
+0

你應該有房子,如「串」,並輸入而不「」 – Mateusz1981

回答

1

傳遞您的數據幀input和字符串匹配爲word

foo <- function(input, word = "Hou") { 
    name <- as.character(substitute(input)) 
    res <- substr(name, 1, 3) == word 
    return(res) 
} 

House <- Duck <- data.frame() 
foo(House) 
[1] TRUE 
foo(Duck) 
[1] FALSE 

編輯(到OP的評論作出迴應):

foo <- function(input, word = "Hou") { 
    name <- as.character(substitute(input)) 
    res <- substr(name, 1, 3) == word 
    if (res) { 
     nametitle <- input[1, 2] 
    } else { 
     nametitle <- input[1, 3] 
    } 
    return(nametitle) 
} 
+0

嗨, 試想一下,在函數之前,我們稱之爲數據幀 輸入< - 房子,然後我們被軟件寫功能 富< - 功能(輸入,字= 「侯」){ 名稱< - as.character(替代(輸入)) RES < - SUBSTR(姓名,1,3)==字 返回(RES) } 然後,我需要它的 富(輸入) [1]真 –

+0

@ JM_44我編輯我的回答r – PoGibas

+0

我不想再浪費你的時間了,但我需要的就是這一點。 唯一的一點,如果在這個例子中,「房子」裏面的引號,它只是一個字的房子。但我所擁有的是數據框。 如果你可以拿出一個電話它輸入< - 衆議院,並使其工作,這正是我所需要的 –

0

裏面的函數?標準把戲是deparse(substitute(.))

fun <- function(input){ 
    inpName <- deparse(substitute(input)) 
    substr(inpName, start=1, stop=3) == "Hou" 
} 

fun(House) 
#[1] TRUE