代码在函数外部执行,但不在函数内部
code executes outside function, but not inside it
我的问题是,某些 代码在函数外部执行,而不是在函数内部执行 。在我的示例中,某些单元格的内容应从输入 table 传输到输出 table。在删除或添加 rows/cols 的情况下,我不会通过索引访问单元格(例如输入[3,4]),而是通过应用条件(例如输入[(which(input$code== "A1")),(which(colnames(input)=="kg"))].
所以这是我的数据的最小化版本:
input<-data.frame(animal=c("cat","dog","mouse","deer","lion"),
m=c(0.5,1,0.1,1.5,3),
kg=c(5,20,0.2,50,100),
code=c("A4","A5","A3","A1","A2"))
output<-data.frame(code=c("A1","A2","A3","A4","A5"),
kg=numeric(5))
在函数外执行,有效(输入table单元格的内容应该复制到输出table中的一个suitable):
row_out<-which(output$code=="A1")
col_out<-which(colnames(output)=="kg")
row_in<-which(input$code=="A1")
col_in<-which(colnames(input)=="kg")
output[row_out,col_out]<-input[row_in,col_in]
和包含相同代码的函数,除了用引用的代码表达式替换函数参数 (codeexpression) 外,它在外部工作:
fun_transfer<-function(codeexpression){
row_out<-which(output$code==codeexpression)
col_out<-which(colnames(output)=="kg")
row_in<-which(input$code==codeexpression)
col_in<-which(colnames(input)=="kg")
output[row_out,col_out]<-input[row_in,col_in]
}
问题:现在执行
fun_transfer("A4")
不会导致错误,也不会导致输出结果 table。
为什么这个功能不起作用或者它有什么作用?引号有问题吗?
任何帮助,将不胜感激
谢谢,
米歇尔
在最好的情况下,数据作为参数进入函数并将其作为 return 值保留。
在函数之外
output[row_out,col_out] <- input[row_in,col_in]
更改现有 data.frame。您可以(或更好:不应该)从函数内部更改函数外部的某些变量。
只需使用 return
语句结束您的函数即可 return 将已更改的数据帧发送给调用者
编辑
您尝试编写的内容似乎是 merge
的次要版本。如果以下内容回答了您的问题,它可能会更简洁、更快速、更地道:
input<-data.frame(animal=c("cat","dog","mouse","deer","lion"),
m=c(0.5,1,0.1,1.5,3),
kg=c(5,20,0.2,50,100),
code=c("A4","A5","A3","A1","A2"))
output<-data.frame(code=c("A1","A2","A3","A4","A5"))
output <- merge(output, input[, c("code", "kg")], by = "code",
all.x = TRUE, all.y = FALSE)
print(output)
我的问题是,某些 代码在函数外部执行,而不是在函数内部执行 。在我的示例中,某些单元格的内容应从输入 table 传输到输出 table。在删除或添加 rows/cols 的情况下,我不会通过索引访问单元格(例如输入[3,4]),而是通过应用条件(例如输入[(which(input$code== "A1")),(which(colnames(input)=="kg"))].
所以这是我的数据的最小化版本:
input<-data.frame(animal=c("cat","dog","mouse","deer","lion"),
m=c(0.5,1,0.1,1.5,3),
kg=c(5,20,0.2,50,100),
code=c("A4","A5","A3","A1","A2"))
output<-data.frame(code=c("A1","A2","A3","A4","A5"),
kg=numeric(5))
在函数外执行,有效(输入table单元格的内容应该复制到输出table中的一个suitable):
row_out<-which(output$code=="A1")
col_out<-which(colnames(output)=="kg")
row_in<-which(input$code=="A1")
col_in<-which(colnames(input)=="kg")
output[row_out,col_out]<-input[row_in,col_in]
和包含相同代码的函数,除了用引用的代码表达式替换函数参数 (codeexpression) 外,它在外部工作:
fun_transfer<-function(codeexpression){
row_out<-which(output$code==codeexpression)
col_out<-which(colnames(output)=="kg")
row_in<-which(input$code==codeexpression)
col_in<-which(colnames(input)=="kg")
output[row_out,col_out]<-input[row_in,col_in]
}
问题:现在执行
fun_transfer("A4")
不会导致错误,也不会导致输出结果 table。
为什么这个功能不起作用或者它有什么作用?引号有问题吗? 任何帮助,将不胜感激 谢谢, 米歇尔
在最好的情况下,数据作为参数进入函数并将其作为 return 值保留。
在函数之外
output[row_out,col_out] <- input[row_in,col_in]
更改现有 data.frame。您可以(或更好:不应该)从函数内部更改函数外部的某些变量。
只需使用 return
语句结束您的函数即可 return 将已更改的数据帧发送给调用者
编辑
您尝试编写的内容似乎是 merge
的次要版本。如果以下内容回答了您的问题,它可能会更简洁、更快速、更地道:
input<-data.frame(animal=c("cat","dog","mouse","deer","lion"),
m=c(0.5,1,0.1,1.5,3),
kg=c(5,20,0.2,50,100),
code=c("A4","A5","A3","A1","A2"))
output<-data.frame(code=c("A1","A2","A3","A4","A5"))
output <- merge(output, input[, c("code", "kg")], by = "code",
all.x = TRUE, all.y = FALSE)
print(output)