【问题标题】:How to store the output of my customized function in R?如何将我的自定义函数的输出存储在 R 中?
【发布时间】:2022-01-19 02:52:31
【问题描述】:

我想构建我的函数来更改列名。

x1 = c(1:5)
x2 = c(6:10)
x = data.frame(
  X1 = x1,
  X2 = x2
)

myFunction = function(x) {
  x <- rename(x, "newX1" = "X1")
  x <- rename(x, "newX2" = "X2")
  newX <- x
  return(newX)
}

print(myFunction(x))

输出如下:

  newX1 newX2
1     1     6
2     2     7
3     3     8
4     4     9
5     5    10

我可以看到我想要的结果,但是输出没有作为数据存储在我的内存中。 我想使用函数的输出(数据)进行下一个过程。

谢谢。

【问题讨论】:

  • 试试y &lt;- myFunction(x)
  • @Park OMG!这是如此简单的方法。非常感谢!!! :D
  • 你也有很多不必要的代码,同样的:myFunction &lt;- function(x) {rename(x, "newX1" = "X1", "newX2" = "X2")} 并且可以说,它甚至不应该是一个自定义函数,你可以使用 y &lt;- rename(...
  • 详细说明 Park 的回答:R 使用“按值调用”。这意味着输入参数被复制并在函数体中更改它们对传递的变量没有影响。
  • @rg255 当我进行数据清理时,我认为该功能是因为数据有很多列需​​要重命名过程。然后我可以通过将每个文件名放在 x 中来使用该函数。如果你有更好的想法,请告诉我。谢谢你的回答。

标签: r function rename


【解决方案1】:

有很多代码在您的尝试中不需要 - 基本上您只是为 rename() 函数创建了一个包装器,而没有添加太多。你可以这样做

rename(x, "newX1" = "x1", "newX2" = "x2"))

要让它分配给对象,你可以这样做

x <- rename(x, "newX1" = "x1", "newX2" = "x2"))

或者

assign("x", rename(x, "newX1" = "x1", "newX2" = "x2"))

从您的 cmets 看来,您似乎有许多 data.frames 想要在其中进行相同的重命名,您可以使用 for 循环自动执行此操作

# Exmaple datasets
df1 <- df2 <- df3 <- df4 <- df5 <- data.frame(x1 = 1:5, x2 = 6:10)
# Define datasets to rename
datasets_to_rename <- c("df1", "df2", "df3")
# Rename the selected datasets
for(i in datasets_to_rename){
  assign(i, rename(get(i), "newX1" = "x1", "newX2" = "x2"))
}

如果您想对全局环境中的所有 data.frames 执行此操作,您可以使其更加自动化

for(i in names(Filter(is.data.frame, as.list(.GlobalEnv)))){
  assign(i, rename(get(i), "newX1" = "x1", "newX2" = "x2"))
}

【讨论】:

  • 谢谢!我正在寻找这个答案! :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
  • 2015-06-08
  • 2013-12-21
  • 2022-11-15
  • 1970-01-01
相关资源
最近更新 更多