我非常熟悉 R 的标准 ifelse 语句,以及如何创建嵌套的 ifelse 语句。但是,我想创建一个“更好”的版本,这样我就不必多次复制/粘贴 ifelse。
以这个嵌套的 ifelse 语句为例:
df <- data.frame(b = 1:5)
df$a <- ifelse(df$b == 1,1,
ifelse(df$b == 2,2,
ifelse(df$b == 3,3,4)))
Run Code Online (Sandbox Code Playgroud)
相反,我想做的是创建一个函数,就像我可以这样调用:
df$a <- myFunction(df$b == 1,1,
df$b == 2,2,
df$b == 3,3,4)
Run Code Online (Sandbox Code Playgroud)
我希望该函数能够获取我输入的参数数量,从而知道要包含多少 ifelse 语句,然后将参数插入正确的位置,直到我想要的数量为止。
仍然有一些重复,但是在创建更长的嵌套 ifelse 语句时,最好不必重复那段代码,然后尝试跟踪结束括号的。
我看到还有另一个相关问题,但答案不是我要找的.我想要一个可以分配给一个对象的函数,但是即使在分配时仍然会打印输出,但不能双重打印它.
在这种情况下:
fun <- function(x) {
print(x+1)
x+1
}
a <- fun(3)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它将保存到a,它将打印到控制台,这是我想要的.
但在这种情况下:
fun(3)
Run Code Online (Sandbox Code Playgroud)
它会打印到控制台两次.有没有办法从案例1中获得所需的结果,而不需要在案例2上进行双重打印?
我非常习惯R的h2o框架,但是在python中适应h2o的某些方面有些麻烦。
我知道您可以使用.copy()方法创建熊猫数据框的副本,以便在更新新数据框时也不会更新原始数据框。水框架是否具有类似的功能?更复杂的是,h2o帧似乎无法按照功能本地/全局环境规则运行。
下面是一个示例,看来,如果仅我可以创建框架的.copy或使函数本地环境不更新全局环境,就可以解决我的问题。如果我在R中创建相同的对象,那么它的行为将完全符合预期,并且实际上并未修改原始h2o框架中的列,那么如何使python以相同的方式工作?
##### A FUNCTION TO CHANGE THE VALUE OF A COLUMN
def test_func(train_df,
var):
train_df[var] = train_df[var].log()
return(train_df)
##### TRY TO CREATE A NEW COPY OF THE FRAME WITH THE COLUMN CHANGED
new_df = test_func(train_df = old_df,
var = 'target')
##### THE COLUMN IN BOTH new_df AND old_df has both been changed.
Run Code Online (Sandbox Code Playgroud) 我有几个 python 函数,我试图将它们创建到一个包中。每个函数都存在于自己的 python 文件中,并使用全局变量将一些对象返回到全局环境,其中一些对象被其他 python 函数使用。
当这些函数是在 python 控制台中定义的独立函数时,它们工作得很好,但是当我将它们全部放入 python 包中时,全局变量不再作为全局变量返回。
为什么使用包文件定义的函数不返回全局变量/如何绕过这个?
一个非常简单的例子:
python_function1.py
def function1(x):
global new_table
new_table = x
Run Code Online (Sandbox Code Playgroud)
python_function2.py
def function2(new_table):
global new_table2
new_table2 = new_table
Run Code Online (Sandbox Code Playgroud)