首页 > 解决方案 > 使用 data.frame$column 的 R 函数不起作用

问题描述

以下两个功能目前不起作用,但是当我将它们全部写出来时起作用 - 不知道为什么。任何修复建议都会很棒。

change_specific_column_name <- function(data.frame,old_column_name,new_column_name){
  names(data.frame)[names(data.frame) == old_column_name] <- new_column_name
}

change_specific_observations_name <- function(data.frame, column_name, old_obseration, new_observation){
   data.frame$column_name[which(data.frame$column_name == old_obseration)] <- new_observation
}

test_frame <- data.frame(Does=1,This=2,Work=3)

change_specific_column_name(test_frame,"Work","Happen") # this doesn't change the name of the column

names(test_frame)[names(test_frame) == "Work"] <- "Happen" # writing out the function does change the name

标签: rfunctionnames

解决方案


虽然不准确,但您可以将函数的参数视为按值传递,因此很明显对函数的形参所做的更改不会影响实际参数。

任何修复建议都会很棒。

如果你真的想要一个函数来修改它的参数,你可以使用一种技术,例如在 R 中通过引用调用;基本上只是将您的作业包装在eval.parent(substitute(…)).

change_specific_column_name <- function(data.frame, old_column_name, new_column_name)
 eval.parent(substitute(names(data.frame)[names(data.frame) == old_column_name] <- new_column_name))

推荐阅读