【问题标题】:data.table and character vectorsdata.table 和字符向量
【发布时间】:2011-07-23 01:22:02
【问题描述】:

在我的工作中,我经常将变量列表称为一个字符向量。

A <- data.table(var1 = 1:10, var2 = 11:20, var3 = 21:30)
vecvar <- c("var1", "var2", "var3")

只要有可能,我想使用vecvar 而不是枚举变量,因为这使我的代码对未来的应用程序更加健壮,以适应稍微不同的变量列表。

我最近发现了data.table,尽管我非常喜欢语法的整体优雅和效率提升,但我发现它与我上面概述的倾向有些冲突。确实,A[, vecvar] 不起作用。

我不确定解决此问题的最佳方法。

A[, vecvar, with=F] 可以工作,但并不总是很方便(例如,A[, list(vecvar, var1+var2), with=F] 不工作)。

A[, sapply(vecvar, get)] 不起作用,但 A[, sapply(vecvar, function(x) get(x))] 会。

我没有被卡住,因为我有办法处理它——我只是想知道在我养成坏习惯之前最好的解决方法是什么!

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    这是你想做的吗?

    > subset(A, select=vecvar[1:2])
          var1 var2
     [1,]    1   11
     [2,]    2   12
     [3,]    3   13
     [4,]    4   14
     [5,]    5   15
     [6,]    6   16
     [7,]    7   17
     [8,]    8   18
     [9,]    9   19
    [10,]   10   20
    

    【讨论】:

    • 嗨 - 不是真的,因为它使用 data.frame 结构,但不能与 data.table 功能无缝结合。例如,我想要一个在 data.table 中返回的非常简短的语句:vecvar, var1+var2(在 vecvar 中明确提到 var1 和 var2)到目前为止我所想到的所有方法都使这比应该的更复杂是必要的。
    【解决方案2】:

    我有点明白你的意思。 FAQ1.6 有帮助吗?此外,datatable-help 上有一些关于在 data.table 中使用 quote()-ed 表达式的主题。

    【讨论】:

    • 您好——感谢您的回复,对于此评论的延迟,我们深表歉意!是的,quote()-ed 表达式有可能提供帮助;但是我无法在字符向量和 data.table 中可用的 quote()-ed 表达式之间建立一个缺失的桥梁。我猜这是可行的;如果是这样,它确实可以解决我的问题!
    • 遇到与@crayola 完全相同的问题。不幸的是,我看不到字符向量和引号之间的界限。 parse(text=) 并没有帮助我。谁能帮忙举个小例子?
    猜你喜欢
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 2014-06-28
    • 2022-11-01
    • 2017-08-11
    • 2015-02-08
    • 2016-12-01
    • 1970-01-01
    相关资源
    最近更新 更多