使用附加时在R中命名冲突

时间:2014-10-21 04:06:31

标签: r

我感觉好像经常在R中,我在附加的数据帧和其他对象之间发现奇怪的命名冲突,附加/分离不能按预期工作(只是附加了相同数据帧的两个副本,甚至不确定它们是否相同)以及一系列轻柔的语言特定问题。一小时前工作的代码突然产生新的错误等。

处理这类东西是否有最好的做法?如果我坚持使用单个字母命名数据帧然后根本不附加,我是否会错过效率?

2 个答案:

答案 0 :(得分:6)

  

附加/分离(原文如此)未按预期工作

正如joran和BondedDust所提到的,使用attach总是一个坏主意,因为它会导致你发现的愚蠢,模糊的错误。

  

使用单个字母命名数据框

也不要这样做!为变量提供有意义的名称,以便在六个月后再回到它时,您的代码更容易理解。


如果您的问题是您不想重复键入数据框的名称来访问列,那么请使用具有特殊评估的功能来避免这种需要。

例如,

some_sample_data <- data.frame(x = 1:10, y = runif(10))

<强>子集

重复打字,努力工作:

some_sample_data[some_sample_data$x > 3 & some_sample_data$y > 0.5, ]

使用subset轻松替代:

subset(some_sample_data, x > 3 & y > 0.5)

<强>重新排序

重复打字,努力工作:

order_y <- order(some_sample_data$y)
some_sample_data[order_y, ]

更轻松地使用plyr中的arrange

arrange(some_sample_data, y)

<强>转化

重复打字,努力工作:

some_sample_data$z <- some_sample_data$x + some_sample_data$y

更轻松地使用withwithinmutate(来自plyr的最后一个):

some_sample_data$z <- with(some_sample_data, x + y)
some_sample_data <- within(some_sample_data, z <- x + y)
some_sample_data <- mutate(some_sample_data, z = x + y)

<强>建模

正如MrFlick所提到的,许多函数,特别是建模函数,都有一个data参数,可以避免重复数据名称。

重复打字,努力工作:

lm(some_sample_data$y ~ some_sample_data$x)

使用数据参数:

lm(y ~ x, data = some_sample_data)

您可以使用以下命令查看stats包中具有data参数的所有函数:

library(sig)
stats_sigs <- list_sigs(pkg2env(stats))
Filter(function(fn) "data" %in% names(fn$args), stats_sigs)

答案 1 :(得分:1)

最好为一系列数据使用新环境。例如,我通常使用此命令创建e环境。

e <- new.env()

然后,您可以使用e$your_var访问环境中的个人。

另一个好处:

  1. 您可以在环境元素上使用eapply
  2. LS(e)中
  3. RM(列表= E)
  4. 避免您要创建的局部变量和函数变量之间的冲突 5 ...