1

私はすでにこれそれを見てきましたが、それでも私の問題を解決できないことに注意してください。

最小限の作業例を考えてみましょう:

a <- c(1,2,3)
b <- c(2,3,4)
c <- c(4,5,6)
dftest <- data.frame(a,b,c)

foo <- function(x, y, data = data) {
    data[, c("x","y")]
    }
foo(a, b, data = dftest)

ここで、最後の行は明らかにError: undefined columns selected. このエラーは、選択される列がデータ フレームの一部ではないxおよびであるため返されます。ydftest

質問: 目的の出力を得るには、関数の定義をどのように定式化する必要がありますか?

> dftest[, c("a","b")]
#   a b
# 1 1 2
# 2 2 3
# 3 3 4

関数を呼び出して取得したいfoo

ソリューションが私の目的に役立つようにするために、関数呼び出しの形式はfoo固定されていると見なされることに注意してください。つまり、呼び出しではなく、関数自体にのみ変更を加える必要があります。つまりfoo(a, b, data = dftest)、許可される唯一の入力です。

アプローチ:最初にandを関数呼び出しの引数に置き換えてから、呼び出しを評価するためにpasteandsubstituteと組み合わせて使用​​しようとしました。ただし、ここでは引用符のエスケープが問題のようです。evalxy

foo <- function(x, y, data = data) {
    substitute(data[, paste("c(\"",x,"\",\"",y,"\")", sep = "")])
    }
foo(a, b, data = dftest)    
eval(foo(a, b, data = dftest))

ここで、次をfoo(a, b, data = dftest)返します。

dftest[, paste("c(\"", a, "\",\"", b, "\")", sep = "")]

ただ、 (その部分eval()だけに注目して)で評価すると、paste

paste("c(\"", a, "\",\"", b, "\")", sep = "")

戻り値:

# "c(\"1\",\"2\")" "c(\"2\",\"3\")" "c(\"3\",\"4\")"

そうではなく、私が望むc("a","b")ように、上記と同じエラーが再び発生します。

4

1 に答える 1