You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言中如何不使用attach函数生成目标图表

不使用attach函数生成图表的解决方案

attach() 函数会将数据框的列直接加载到R的全局搜索路径中,很容易出现变量名冲突、后续代码受残留变量影响的问题,确实不推荐日常使用。你可以通过两种方式修改代码实现完全一致的效果,无需调用attach():


方案1:使用绘图/建模函数的data参数

大部分R的基础绘图、建模函数都支持传入data参数指定数据源,公式中用到的变量会自动从对应数据框中读取,是最简洁的写法,修改后的完整代码如下:

library(dplyr)
library(lubridate)
library(tidyverse)

# 数据集df1
df1 <- structure(
  list(date1 = c("2021-06-28","2021-06-28","2021-06-28","2021-06-28","2021-06-28",
                 "2021-06-28","2021-06-28","2021-06-28"),
       date2 = c("2021-04-02","2021-04-03","2021-04-08","2021-04-09","2021-04-10","2021-07-01","2021-07-02","2021-07-03"),
       Week= c("Friday","Saturday","Thursday","Friday","Saturday","Thursday","Friday","Monday"),
       DR01 = c(4,1,4,3,3,4,3,6), DR02= c(4,2,6,7,3,2,7,4),DR03= c(9,5,4,3,3,2,1,5),
       DR04 = c(5,4,3,3,6,2,1,9),DR05 = c(5,4,5,3,6,2,1,9),
       DR06 = c(2,4,3,3,5,6,7,8),DR07 = c(2,5,4,4,9,4,7,8)),
  class = "data.frame", row.names = c(NA, -8L))

# 生成图表
dmda<-"2021-07-01"

datas<-df1 %>%
  filter(date2 == ymd(dmda)) %>%
  summarize(across(starts_with("DR"), sum)) %>%
  pivot_longer(everything(), names_pattern = "DR(.+)", values_to = "val") %>%
  mutate(name = as.numeric(name))
colnames(datas)<-c("Days","Numbers")

# 移除attach(datas),绘图时指定data参数
plot(Numbers ~ Days, data = datas, ylim=c(0,20))

# 建模时同样指定data参数
model <- nls(Numbers ~ b1*Days^2+b2,start = list(b1 = 47,b2 = 0), data = datas)

# 取列极值时用$符号显式指定所属数据框
new.data <- data.frame(Days = seq(min(datas$Days),max(datas$Days),len = 45))
lines(new.data$Days,predict(model,newdata = new.data))

方案2:用$符号直接访问列

如果不习惯使用公式的data参数,也可以每次调用变量时都显式指定所属的数据框,示例修改点如下:

  • 绘图语句改为:plot(datas$Numbers ~ datas$Days, ylim=c(0,20))
  • 建模语句改为:model <- nls(datas$Numbers ~ b1*datas$Days^2+b2,start = list(b1 = 47,b2 = 0))
  • 极值取值和方案1一致,使用min(datas$Days)、max(datas$Days)

这种写法更直白,完全不会出现变量来源混淆的问题。


内容的提问来源于stack exchange,提问作者user16774617

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:39:01