R переопределить строку в аргумент - PullRequest
0 голосов
/ 01 мая 2018

Исходя из некоторой справки ранее, я думаю, что все, что мне нужно, чтобы это работало, - это способ определить переменную dimxST ниже как не строку, как мне нужно, чтобы она указывала на фрейм данных ....

cpkstudy <- function(x,y){


  dxST <- paste(x,"$",y, sep = "")

  dLSL <- paste(y, "LSL", sep = "")
  dUSL <- paste(y, "USL", sep = "")
  dTar <- paste(y, "Target", sep = "")

  dimxST <- 
  dimLSL <- PivSpecs[[dLSL]]
  dimUSL <- PivSpecs[[dUSL]]
  dimTar <- PivSpecs[[dTar]]


  ss.study.ca(dimxST, LSL = dimLSL, USL =  dimUSL, Target = dimTar,
              alpha = 0.05, f.na.rm = TRUE, f.main = "Six Sigma Study")

}

cpkstudy("cam1","D1")

ссылка на предыдущую запись

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Это другое направление, и вы можете найти кривую обучения немного круче, но она намного мощнее. Вместо того, чтобы передавать все как строки, мы передаем их без кавычек и используем пакет rlang, чтобы выяснить, где оценивать D1.

# the same dummy data frame from Katia's answer
cam1 <- data.frame(D1 = rnorm(10), 
  D2 = rnorm(10))

PivSpecs <- list(D1LSL = 740, D1USL = 760, D1Target = 750)

library(rlang)
cpkstudy <- function(df, y){
  quo_y <- enquo(y)

  dLSL <- paste0(quo_name(quo_y), "LSL")
  dUSL <- paste0(quo_name(quo_y), "USL")
  dTar <- paste0(quo_name(quo_y), "Target")

  dimxST <-  eval_tidy(quo_y, data = df)
  dimLSL <- PivSpecs[[dLSL]]
  dimUSL <- PivSpecs[[dUSL]]
  dimTar <- PivSpecs[[dTar]]


  print(dimxST)
  print (paste("dimLSL=", dimLSL) )
  print (paste("dimUSL=", dimUSL) )
  print (paste("dimTar=", dimTar) )
  # ss.study.ca(dimxST, LSL = dimLSL, USL =  dimUSL, Target = dimTar,
    # alpha = 0.05, f.na.rm = TRUE, f.main = "Six Sigma Study")

}

# notice that I am not quoting cam1 and D1
cpkstudy(cam1, D1)

Если вы хотите узнать больше об этом, я бы посоветовал посмотреть https://dplyr.tidyverse.org/articles/programming.html в качестве обзора (пакет dplyr импортирует некоторые функции, используемые в rlang), и http://rlang.r -lib.org / index.html для более полного списка всех функций и примеров.

0 голосов
/ 01 мая 2018

Вы можете использовать функцию get(), чтобы получить значение объекта из его строкового представления. В этом решении я не оценивал саму функцию ss.study.ca(), так как у меня нет ваших входных данных реального случая, вместо этого я просто печатаю значения, которые будут туда идти:

cpkstudy <- function(x,y){


  #dxST <- paste0(x,"$",y)

  dLSL <- paste0(y, "LSL")
  dUSL <- paste0(y, "USL")
  dTar <- paste0(y, "Target")


  dimxST <- get(x)[,y]
  print(dimxST)


  dimLSL <- PivSpecs[[dLSL]]
  dimUSL <- PivSpecs[[dUSL]]
  dimTar <- PivSpecs[[dTar]]

  print (paste("dimLSL=", dimLSL) )
  print (paste("dimUSL=", dimUSL) )
  print (paste("dimTar=", dimTar) )

  #ss.study.ca(dimxST, LSL = dimLSL, USL =  dimUSL, Target = dimTar,
  #            alpha = 0.05, f.na.rm = TRUE, f.main = "Six Sigma Study")

}

# create some dummy dataframe to test with this example
cam1 <- data.frame(D1 = rnorm(10), 
                   D2 = rnorm(10))

# define a list that will be used within a function
PivSpecs <- list(D1LSL = 740, D1USL = 760, D1Target = 750)

#test function
cpkstudy("cam1","D1")

#[1]  1.82120625 -0.08857998 -0.08452232 -0.43263828  0.17974556 -0.91141414 #-2.30595203 -1.24014396 -1.83814577 -0.24812598
#[1] "dimLSL= 740"
#[1] "dimUSL= 760"
#[1] "dimTar= 750"

Я также изменил ваши paste() команды на paste0(), который имеет sep="" по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...