获取访问的最后一个数据框的名称,并在后续代码中插入该名称

发布于 2025-01-26 03:25:57 字数 664 浏览 3 评论 0原文

我想保存最后使用的数据框的名称,然后在向前移动的代码中使用该名称。 SAS通过%syslast_last _last _系统变量提供此功能。有等效的吗?想做这样的事情:

mydf1 <- data.frame(x = c('my data'), y = c('more data'))
lastDF$newVarnames <- paste(lastDF$oldVarnames, "baseline", sep = "_") #do something to the mydf1 dataframe
 
mydf2 <- data.frame(x = c('my data'), y = c('more data'))
lastDF$newVarnames <- paste(lastDF$oldVarnames, "baseline", sep = "_") #do something to mydf2 dataframe

想要使用lastdf的引用,而不是实际的数据帧名称。另外,想避免仅仅做

lastDF <- mydf1, mydf2, ...

I would like to save the name of the last dataframe used and then use that name in code moving forward. SAS provides this feature via %syslast and _last_ system variables. Is there an R equivalent? Would like to do something like this:

mydf1 <- data.frame(x = c('my data'), y = c('more data'))
lastDF$newVarnames <- paste(lastDF$oldVarnames, "baseline", sep = "_") #do something to the mydf1 dataframe
 
mydf2 <- data.frame(x = c('my data'), y = c('more data'))
lastDF$newVarnames <- paste(lastDF$oldVarnames, "baseline", sep = "_") #do something to mydf2 dataframe

Want to use a reference like lastDF instead of the actual dataframe name. Also, would like to avoid just doing

lastDF <- mydf1, mydf2, ...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦年海沫深 2025-02-02 03:25:57

如注释中所述,此功能在R中不存在。最接近的东西是.last.value,它是最近运行命令的结果。

基本r的

基本R方法将相同的代码应用于多个对象,将是应用自定义功能。您仍然需要指定对象的名称:

doSomething <- function(df) {
  names(df) <- paste(names(df), "baseline", sep = "_")
  return(df)
}

mydf1 <- data.frame(x = c('my data'), y = c('more data'))
mydf1 <- doSomething(mydf1)

mydf2 <- data.frame(x = c('my data'), y = c('more data'))
mydf2 <- doSomething(mydf2)

magrittr %&gt;%管道

向前管道%&gt;%magrittr package允许允许我们要将data.frame()的输出直接发送到dosomething()(作为第一个参数),因此我们可以做一个不错的单线:

library('magrittr')

doSomething <- function(df) {
  names(df) <- paste(names(df), "baseline", sep = "_")
  return(df)
}

mydf1 <- data.frame(x = c('my data'), y = c('more data')) %>% doSomething()
mydf2 <- data.frame(x = c('my data'), y = c('more data')) %>% doSomething()

在场 :用于全面性的数据修改

:一些来自其他编程语言的人用于定期修改变量(通过参考)。这在R中并不常见,但是使用sign> nistion() + deparse() + 替代()

doSomething <- function(df) {
  df.temp <- df
  names(df.temp) <- paste(names(df.temp), "baseline", sep = "_")
  assign(deparse(substitute(df)), df.temp, envir = parent.frame())
}

mydf1 <- data.frame(x = c('my data'), y = c('more data'))
doSomething(mydf1) # note that this time we don't need to manually store the output of `doSomething()` back into `mydf1`

mydf2 <- data.frame(x = c('my data'), y = c('more data'))
doSomething(mydf2)

As mentioned in the comments, this feature does not exist in R. The closest thing is .Last.value, which holds the result of the most recently ran command.

Base R

The base R approach to apply identical code to multiple objects, would be to apply a custom function. You'll still need to specify the object's name:

doSomething <- function(df) {
  names(df) <- paste(names(df), "baseline", sep = "_")
  return(df)
}

mydf1 <- data.frame(x = c('my data'), y = c('more data'))
mydf1 <- doSomething(mydf1)

mydf2 <- data.frame(x = c('my data'), y = c('more data'))
mydf2 <- doSomething(mydf2)

Magrittr %>% pipe

The forward pipe %>% from the magrittr package allows us to send the output of data.frame() directly to doSomething() (as the first argument), so we can make a nice one-liner:

library('magrittr')

doSomething <- function(df) {
  names(df) <- paste(names(df), "baseline", sep = "_")
  return(df)
}

mydf1 <- data.frame(x = c('my data'), y = c('more data')) %>% doSomething()
mydf2 <- data.frame(x = c('my data'), y = c('more data')) %>% doSomething()

In-place data modification

For comprehensiveness: Some people coming from other programming languages are used to in-place modification of variables (passing by reference). This is not commonplace in R, but it is possible with a little hack using assign() + deparse() + substitute():

doSomething <- function(df) {
  df.temp <- df
  names(df.temp) <- paste(names(df.temp), "baseline", sep = "_")
  assign(deparse(substitute(df)), df.temp, envir = parent.frame())
}

mydf1 <- data.frame(x = c('my data'), y = c('more data'))
doSomething(mydf1) # note that this time we don't need to manually store the output of `doSomething()` back into `mydf1`

mydf2 <- data.frame(x = c('my data'), y = c('more data'))
doSomething(mydf2)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文