如何在 R 函数中引用一个对象?
How to refer to an object inside a function in R?
从多个字符串构建数据框名称时,如何在函数中引用我的数据框?
a <- c(1:6)
b <- c("05/12/2012 05:00","05/12/2012 06:00","06/12/2012 05:00",
"06/12/2012 06:00", "07/12/2012 09:00","07/12/2012 07:00")
c <-c("0","0","0","1","1","1")
d <-c("12", "12", "13", "15", "16", "17")
dataframenumber4 <- data.frame(a,b,c,d,stringsAsFactors = FALSE)
我想 select 我的数据框中的一个值。
dataframenumber4[1,4]
[1] 12
但我也想构建一个函数,因为我有多个数据框,我想 select 来自:
selectvalue <- function(dataframe, number){
paste0(dataframe,number)[1,4]
}
selectvalue("dataframe", "number4")
[1] NA NA NA
我认为这是不对的,因为 R 没有将我的小字符串识别为对象名称。所以我试图修复它:
selectvalue <- function(dataframe, number){
eval(paste0(dataframe,number))[1,4]
}
selectvalue("dataframe", "number4")
Returns "Error in eval(paste0(dataframe,number, quote = FALSE))[1,4]: incorrect number of dimensions"
我在我的函数中尝试了很多东西,但我无法让 R 识别出我正在尝试给它我的数据框。我怎样才能解决这个问题?
您可以使用 get
函数通过名称访问对象。 data.frame 的名称是使用 paste0(dataframe,number)
准备的,然后您可以使用该名称调用 get
来访问数据框。因此你的函数可以写成:
selectvalue <- function(dataframe, number){
get(paste0(dataframe,number))[1,4]
}
selectvalue("dataframenumber",4)
[1] "12"
以上功能符合 OP 的期望,但我应该建议对该功能进行一些改进:
- dataframe的名称可以由调用者直接传递。无需在函数中准备数据框的名称。
- 行号和列号在函数中是硬编码的。这可以由调用者传递。
因此,函数可以重写并调用为:
selectvalue <- function(dataframe, rownum, colnum){
get(dataframe)[rownum,colnum]
}
selectvalue(paste0("dataframenumber",4), 1 ,4)
#[1] "12"
selectvalue(paste0("dataframenumber",4), 2 ,2)
#[1] "05/12/2012 06:00"
从多个字符串构建数据框名称时,如何在函数中引用我的数据框?
a <- c(1:6)
b <- c("05/12/2012 05:00","05/12/2012 06:00","06/12/2012 05:00",
"06/12/2012 06:00", "07/12/2012 09:00","07/12/2012 07:00")
c <-c("0","0","0","1","1","1")
d <-c("12", "12", "13", "15", "16", "17")
dataframenumber4 <- data.frame(a,b,c,d,stringsAsFactors = FALSE)
我想 select 我的数据框中的一个值。
dataframenumber4[1,4]
[1] 12
但我也想构建一个函数,因为我有多个数据框,我想 select 来自:
selectvalue <- function(dataframe, number){
paste0(dataframe,number)[1,4]
}
selectvalue("dataframe", "number4")
[1] NA NA NA
我认为这是不对的,因为 R 没有将我的小字符串识别为对象名称。所以我试图修复它:
selectvalue <- function(dataframe, number){
eval(paste0(dataframe,number))[1,4]
}
selectvalue("dataframe", "number4")
Returns "Error in eval(paste0(dataframe,number, quote = FALSE))[1,4]: incorrect number of dimensions"
我在我的函数中尝试了很多东西,但我无法让 R 识别出我正在尝试给它我的数据框。我怎样才能解决这个问题?
您可以使用 get
函数通过名称访问对象。 data.frame 的名称是使用 paste0(dataframe,number)
准备的,然后您可以使用该名称调用 get
来访问数据框。因此你的函数可以写成:
selectvalue <- function(dataframe, number){
get(paste0(dataframe,number))[1,4]
}
selectvalue("dataframenumber",4)
[1] "12"
以上功能符合 OP 的期望,但我应该建议对该功能进行一些改进:
- dataframe的名称可以由调用者直接传递。无需在函数中准备数据框的名称。
- 行号和列号在函数中是硬编码的。这可以由调用者传递。
因此,函数可以重写并调用为:
selectvalue <- function(dataframe, rownum, colnum){
get(dataframe)[rownum,colnum]
}
selectvalue(paste0("dataframenumber",4), 1 ,4)
#[1] "12"
selectvalue(paste0("dataframenumber",4), 2 ,2)
#[1] "05/12/2012 06:00"