代码在函数外部执行,但不在函数内部

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)