【发布时间】:2018-11-29 20:46:04
【问题描述】:
例如,在 Pandas 中,您总是需要通过字符串中的名称来引用 DataFrame 中的列:
df = pd.DataFrame(list(range(1,10)),columns = ["a"])
df["a"]
但是在 R 中,包括它的一些包,例如 data.table 和 dplyr,您可以引用不带引号的列,就像这样:
dt <- data.table(a = 1:10)
dt[,.(a)]
在我看来,引用未引用的列名是一场灾难。您获得的唯一好处是您无需输入""。但缺点是无限的:
1) 您经常需要以编程方式选择列。如果列名不加引号,您需要区分“外部”和“内部”上下文中的变量。
col_name <- "a"
dt[,..col_name]
2) 即使您设法选择在字符串向量中指定的列,也很难对它们进行(复杂)操作。在this question中提到,你需要这样做:
diststr = "dist"
valstr = "val"
x[get(valstr) < 5, c(diststr) :=
get(diststr)*sum(get(diststr))]
总而言之,我的感觉是,与在 pandas 中完成的方式相比,在 R 中处理数据根本不简单/自然。有人可以解释一下这有什么好处吗?
【问题讨论】:
-
但从基础 R 也可以看到
with()、within()、subset()、模型公式,...非标准评估的优点和缺点是巨大的蠕虫罐头,但我投票决定以基于意见的方式关闭...... -
这是基于意见的,但“缺点是无限的”是错误的。我对
data.table不太熟悉,但dplyr的评估是完全明确的。是的,这是为了节省打字。键入""需要 2 到 4 次击键(如果您使用 Rstudio,则为 2 次),当您必须键入这么多变量时,它会变得很多。 -
同样在 Rstudio 中,不带引号的变量允许使用选项卡自动完成变量名,而这在字符串中可能是不可能的。
标签: r pandas dplyr data.table