我感觉好像经常在R中,我在附加的数据帧和其他对象之间发现奇怪的命名冲突,附加/分离不能按预期工作(只是附加了相同数据帧的两个副本,甚至不确定它们是否相同)以及一系列轻柔的语言特定问题。一小时前工作的代码突然产生新的错误等。
处理这类东西是否有最好的做法?如果我坚持使用单个字母命名数据帧然后根本不附加,我是否会错过效率?
答案 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
更轻松地使用with
,within
或mutate
(来自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
访问环境中的个人。
另一个好处:
eapply
。