我对substr有疑问,但我不知道它是否需要使用。我已经将示例简化为最小化,因此我只需要将结果复制到函数中并循环遍历它。
想象一下你有一个日期框架(“House”),但在函数内部,你必须将它作为输入引用。由于会有很多数据框通过它,所以它不能被称为“众议院”。
所以,数据框架“House”。在函数内部,获取输入的名称。但是,我想将数据框名称的三个首字母与“侯”进行比较。如果为TRUE,则返回一些值,如果为false则返回另一个值。
我试过但我无法理解。我不知道是否有人能够帮助我,否则我的问题会永远陷入黑点。
任何帮助都会有用。我需要回复者为[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 :(得分: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)
}
答案 1 :(得分:0)
在功能内部?标准技巧是deparse(substitute(.))
。
fun <- function(input){
inpName <- deparse(substitute(input))
substr(inpName, start=1, stop=3) == "Hou"
}
fun(House)
#[1] TRUE