如何将我的自定义函数的输出存储在 R 中?

Posted

技术标签:

【中文标题】如何将我的自定义函数的输出存储在 R 中?【英文标题】:How to store the output of my customized function in 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 中来使用该函数。如果你有更好的想法,请告诉我。谢谢你的回答。 【参考方案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

以上是关于如何将我的自定义函数的输出存储在 R 中?的主要内容,如果未能解决你的问题,请参考以下文章

hadoop的自定义分组实现 (Partition机制)

如何在priority_queue中使用函子作为自定义比较器

在mySQL中,如何定义一行属性的自定义函数?

R Shiny:如何从数据表中的自定义按钮调用 JavaScript 函数

如何使用管理员 Liferay 将我的自定义 portlet 拖/添加到 liferay 页面?

如何在 SWIFT 中以编程方式将我的自定义控制器变成根控制器? (无法加载 NIB)